From 65ec827cc94f4fcb2cdcdf235156ab55518d1b9e Mon Sep 17 00:00:00 2001 From: Viacheslav Gonkivskyi Date: Wed, 8 Nov 2023 12:26:45 +0200 Subject: [PATCH 1/5] test(blob): add submitting equal blobs test case --- nodebuilder/tests/blob_test.go | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/nodebuilder/tests/blob_test.go b/nodebuilder/tests/blob_test.go index ccbc6440cc..1bda4163b4 100644 --- a/nodebuilder/tests/blob_test.go +++ b/nodebuilder/tests/blob_test.go @@ -123,6 +123,37 @@ func TestBlobModule(t *testing.T) { require.ErrorContains(t, err, blob.ErrBlobNotFound.Error()) }, }, + { + name: "Submit equal blobs", + doFn: func(t *testing.T) { + appBlob, err := blobtest.GenerateV0Blobs([]int{8, 4}, true) + require.NoError(t, err) + b, err := blob.NewBlob( + appBlob[0].ShareVersion, + append([]byte{appBlob[0].NamespaceVersion}, appBlob[0].NamespaceID...), + appBlob[0].Data, + ) + require.NoError(t, err) + height, err := fullClient.Blob.Submit(ctx, []*blob.Blob{b, b}, nil) + require.NoError(t, err) + _, err = fullClient.Header.WaitForHeight(ctx, height) + require.NoError(t, err) + b0, err := fullClient.Blob.Get(ctx, height, b.Namespace(), b.Commitment) + require.NoError(t, err) + require.Equal(t, b, b0) + + // give some time to store the data, + // otherwise the test will hang on the IPLD level. + time.Sleep(time.Second) + + proof, err := fullClient.Blob.GetProof(ctx, height, b.Namespace(), b.Commitment) + require.NoError(t, err) + + included, err := fullClient.Blob.Included(ctx, height, b.Namespace(), proof, b.Commitment) + require.NoError(t, err) + require.True(t, included) + }, + }, } for _, tt := range test { From 0ff12f9556c2a718d18d4aa7b221cb362f03ea37 Mon Sep 17 00:00:00 2001 From: Viacheslav Gonkivskyi Date: Fri, 10 Nov 2023 12:10:56 +0200 Subject: [PATCH 2/5] chore: remove waitForHeight --- nodebuilder/tests/blob_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nodebuilder/tests/blob_test.go b/nodebuilder/tests/blob_test.go index 1bda4163b4..9e5a3cb73a 100644 --- a/nodebuilder/tests/blob_test.go +++ b/nodebuilder/tests/blob_test.go @@ -134,10 +134,10 @@ func TestBlobModule(t *testing.T) { appBlob[0].Data, ) require.NoError(t, err) + height, err := fullClient.Blob.Submit(ctx, []*blob.Blob{b, b}, nil) require.NoError(t, err) - _, err = fullClient.Header.WaitForHeight(ctx, height) - require.NoError(t, err) + b0, err := fullClient.Blob.Get(ctx, height, b.Namespace(), b.Commitment) require.NoError(t, err) require.Equal(t, b, b0) From 4e3eb86ee3a0744926eea9f0193c014f639c6229 Mon Sep 17 00:00:00 2001 From: Viacheslav Gonkivskyi Date: Fri, 10 Nov 2023 13:40:59 +0200 Subject: [PATCH 3/5] test: submit equal blobs in different pfbs --- nodebuilder/tests/blob_test.go | 52 +++++++++++++++++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/nodebuilder/tests/blob_test.go b/nodebuilder/tests/blob_test.go index 9e5a3cb73a..2e6628acd1 100644 --- a/nodebuilder/tests/blob_test.go +++ b/nodebuilder/tests/blob_test.go @@ -73,6 +73,8 @@ func TestBlobModule(t *testing.T) { { name: "Get", doFn: func(t *testing.T) { + // https://github.com/celestiaorg/celestia-node/issues/2915 + time.Sleep(time.Second) blob1, err := fullClient.Blob.Get(ctx, height, blobs[0].Namespace(), blobs[0].Commitment) require.NoError(t, err) require.Equal(t, blobs[0], blob1) @@ -81,6 +83,8 @@ func TestBlobModule(t *testing.T) { { name: "GetAll", doFn: func(t *testing.T) { + // https://github.com/celestiaorg/celestia-node/issues/2915 + time.Sleep(time.Second) newBlobs, err := fullClient.Blob.GetAll(ctx, height, []share.Namespace{blobs[0].Namespace()}) require.NoError(t, err) require.Len(t, newBlobs, len(appBlobs0)) @@ -91,6 +95,8 @@ func TestBlobModule(t *testing.T) { { name: "Included", doFn: func(t *testing.T) { + // https://github.com/celestiaorg/celestia-node/issues/2915 + time.Sleep(time.Second) proof, err := fullClient.Blob.GetProof(ctx, height, blobs[0].Namespace(), blobs[0].Commitment) require.NoError(t, err) @@ -138,12 +144,16 @@ func TestBlobModule(t *testing.T) { height, err := fullClient.Blob.Submit(ctx, []*blob.Blob{b, b}, nil) require.NoError(t, err) + _, err = fullClient.Header.WaitForHeight(ctx, height) + require.NoError(t, err) + b0, err := fullClient.Blob.Get(ctx, height, b.Namespace(), b.Commitment) require.NoError(t, err) require.Equal(t, b, b0) // give some time to store the data, // otherwise the test will hang on the IPLD level. + // https://github.com/celestiaorg/celestia-node/issues/2915 time.Sleep(time.Second) proof, err := fullClient.Blob.GetProof(ctx, height, b.Namespace(), b.Commitment) @@ -154,12 +164,52 @@ func TestBlobModule(t *testing.T) { require.True(t, included) }, }, + { + name: "Submit equal blobs in different PFBs", + doFn: func(t *testing.T) { + appBlob, err := blobtest.GenerateV0Blobs([]int{8, 4}, true) + require.NoError(t, err) + b, err := blob.NewBlob( + appBlob[0].ShareVersion, + append([]byte{appBlob[0].NamespaceVersion}, appBlob[0].NamespaceID...), + appBlob[0].Data, + ) + require.NoError(t, err) + + height0, err := fullClient.Blob.Submit(ctx, []*blob.Blob{b}, nil) + require.NoError(t, err) + + height1, err := fullClient.Blob.Submit(ctx, []*blob.Blob{b}, nil) + require.NoError(t, err) + + heights := []uint64{height0, height1} + for _, height := range heights { + _, err = fullClient.Header.WaitForHeight(ctx, height) + require.NoError(t, err) + + b0, err := fullClient.Blob.Get(ctx, height, b.Namespace(), b.Commitment) + require.NoError(t, err) + require.Equal(t, b, b0) + + // give some time to store the data, + // otherwise the test will hang on the IPLD level. + // https://github.com/celestiaorg/celestia-node/issues/2915 + time.Sleep(time.Second) + + proof, err := fullClient.Blob.GetProof(ctx, height, b.Namespace(), b.Commitment) + require.NoError(t, err) + + included, err := fullClient.Blob.Included(ctx, height, b.Namespace(), proof, b.Commitment) + require.NoError(t, err) + require.True(t, included) + } + }, + }, } for _, tt := range test { tt := tt t.Run(tt.name, func(t *testing.T) { - t.Parallel() tt.doFn(t) }) } From 75fa91fdff797fdbebf7edfc13f040872742f4c2 Mon Sep 17 00:00:00 2001 From: Viacheslav Gonkivskyi Date: Mon, 13 Nov 2023 12:57:15 +0200 Subject: [PATCH 4/5] chore: rework test case --- nodebuilder/tests/blob_test.go | 42 ++++++++++++---------------------- 1 file changed, 14 insertions(+), 28 deletions(-) diff --git a/nodebuilder/tests/blob_test.go b/nodebuilder/tests/blob_test.go index 2e6628acd1..491f2ac3a1 100644 --- a/nodebuilder/tests/blob_test.go +++ b/nodebuilder/tests/blob_test.go @@ -165,44 +165,30 @@ func TestBlobModule(t *testing.T) { }, }, { - name: "Submit equal blobs in different PFBs", + name: "Submit the same blob", doFn: func(t *testing.T) { - appBlob, err := blobtest.GenerateV0Blobs([]int{8, 4}, true) - require.NoError(t, err) - b, err := blob.NewBlob( - appBlob[0].ShareVersion, - append([]byte{appBlob[0].NamespaceVersion}, appBlob[0].NamespaceID...), - appBlob[0].Data, - ) + h, err := fullClient.Blob.Submit(ctx, []*blob.Blob{blobs[0]}, nil) require.NoError(t, err) - height0, err := fullClient.Blob.Submit(ctx, []*blob.Blob{b}, nil) + _, err = fullClient.Header.WaitForHeight(ctx, h) require.NoError(t, err) - height1, err := fullClient.Blob.Submit(ctx, []*blob.Blob{b}, nil) + b0, err := fullClient.Blob.Get(ctx, h, blobs[0].Namespace(), blobs[0].Commitment) require.NoError(t, err) + require.Equal(t, blobs[0], b0) - heights := []uint64{height0, height1} - for _, height := range heights { - _, err = fullClient.Header.WaitForHeight(ctx, height) - require.NoError(t, err) - - b0, err := fullClient.Blob.Get(ctx, height, b.Namespace(), b.Commitment) - require.NoError(t, err) - require.Equal(t, b, b0) + // give some time to store the data, + // otherwise the test will hang on the IPLD level. + // https://github.com/celestiaorg/celestia-node/issues/2915 + time.Sleep(time.Second) - // give some time to store the data, - // otherwise the test will hang on the IPLD level. - // https://github.com/celestiaorg/celestia-node/issues/2915 - time.Sleep(time.Second) + proof, err := fullClient.Blob.GetProof(ctx, h, blobs[0].Namespace(), blobs[0].Commitment) + require.NoError(t, err) - proof, err := fullClient.Blob.GetProof(ctx, height, b.Namespace(), b.Commitment) - require.NoError(t, err) + included, err := fullClient.Blob.Included(ctx, h, blobs[0].Namespace(), proof, blobs[0].Commitment) + require.NoError(t, err) + require.True(t, included) - included, err := fullClient.Blob.Included(ctx, height, b.Namespace(), proof, b.Commitment) - require.NoError(t, err) - require.True(t, included) - } }, }, } From ca80a86c9075d490b1e070c756b6cde52661bffe Mon Sep 17 00:00:00 2001 From: Viacheslav Gonkivskyi Date: Mon, 4 Dec 2023 12:09:59 +0200 Subject: [PATCH 5/5] chore: add comment to the test case --- nodebuilder/tests/blob_test.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/nodebuilder/tests/blob_test.go b/nodebuilder/tests/blob_test.go index 491f2ac3a1..627dd850d0 100644 --- a/nodebuilder/tests/blob_test.go +++ b/nodebuilder/tests/blob_test.go @@ -165,7 +165,10 @@ func TestBlobModule(t *testing.T) { }, }, { - name: "Submit the same blob", + // This test allows to check that the blob won't be + // deduplicated if it will be sent multiple times in + // different pfbs. + name: "Submit the same blob in different pfb", doFn: func(t *testing.T) { h, err := fullClient.Blob.Submit(ctx, []*blob.Blob{blobs[0]}, nil) require.NoError(t, err)