From 9fc5acef87c62bce5ca72837bbdd3f35ebb4af56 Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Tue, 25 Jul 2023 15:18:02 -0400 Subject: [PATCH] fix: check for namespace version zero --- share/namespace.go | 3 +++ share/namespace_test.go | 53 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) diff --git a/share/namespace.go b/share/namespace.go index 433529a57f..276575a309 100644 --- a/share/namespace.go +++ b/share/namespace.go @@ -113,6 +113,9 @@ func (n Namespace) ValidateForData() error { if n.Equals(ParitySharesNamespace) || n.Equals(TailPaddingNamespace) { return fmt.Errorf("invalid data namespace(%s): parity and tail padding namespace are forbidden", n) } + if n.Version() != appns.NamespaceVersionZero { + return fmt.Errorf("invalid data namespace(%s): only version 0 is supported", n) + } return nil } diff --git a/share/namespace_test.go b/share/namespace_test.go index 62746e4b4e..7c18d233c8 100644 --- a/share/namespace_test.go +++ b/share/namespace_test.go @@ -5,6 +5,7 @@ import ( "testing" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" appns "github.com/celestiaorg/celestia-app/pkg/namespace" ) @@ -135,3 +136,55 @@ func TestFrom(t *testing.T) { }) } } + +func TestValidateForBlob(t *testing.T) { + type testCase struct { + name string + ns Namespace + wantErr bool + } + + validNamespace, err := NewBlobNamespaceV0(bytes.Repeat([]byte{0x1}, appns.NamespaceVersionZeroIDSize)) + require.NoError(t, err) + + testCases := []testCase{ + { + name: "valid blob namespace", + ns: validNamespace, + wantErr: false, + }, + { + name: "invalid blob namespace: parity shares namespace", + ns: ParitySharesNamespace, + wantErr: true, + }, + { + name: "invalid blob namespace: tail padding namespace", + ns: TailPaddingNamespace, + wantErr: true, + }, + { + name: "invalid blob namespace: tx namespace", + ns: TxNamespace, + wantErr: true, + }, + { + name: "invalid blob namespace: namespace version max", + ns: append([]byte{appns.NamespaceVersionMax}, bytes.Repeat([]byte{0x0}, appns.NamespaceIDSize)...), + wantErr: true, + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + err := tc.ns.ValidateForBlob() + + if tc.wantErr { + assert.Error(t, err) + return + } + assert.NoError(t, err) + }) + } + +}