From 53f8a4170e101cb02b74be87ad40b0ab53961aab Mon Sep 17 00:00:00 2001 From: Jake Taylor <jake@elixxir.io> Date: Mon, 24 Oct 2022 16:04:25 -0500 Subject: [PATCH] added unit test for indexeddb uniquenes --- indexedDb/implementation_test.go | 53 ++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/indexedDb/implementation_test.go b/indexedDb/implementation_test.go index 34a1d4fc..1de2f457 100644 --- a/indexedDb/implementation_test.go +++ b/indexedDb/implementation_test.go @@ -12,6 +12,7 @@ package indexedDb import ( "encoding/json" "fmt" + "github.com/hack-pad/go-indexeddb/idb" "gitlab.com/elixxir/xxdk-wasm/storage" "gitlab.com/xx_network/primitives/netTime" "os" @@ -252,3 +253,55 @@ func Test_wasmModel_deleteMsgByChannel(t *testing.T) { t.Errorf("Expected %d messages, got %d", expectedMessages, len(result)) } } + +// This test is designed to prove the behavior of unique indexes. +// Inserts will not fail, they simply will not happen. +func TestWasmModel_receiveHelper_UniqueIndex(t *testing.T) { + testString := "test_receiveHelper_UniqueIndex" + eventModel, err := newWASMModel(testString, nil, dummyCallback) + if err != nil { + t.Fatal(err) + } + + // Ensure index is unique + txn, err := eventModel.db.Transaction(idb.TransactionReadOnly, messageStoreName) + if err != nil { + t.Fatal(err) + } + store, err := txn.ObjectStore(messageStoreName) + if err != nil { + t.Fatal(err) + } + idx, err := store.Index(messageStoreMessageIndex) + if err != nil { + t.Fatal(err) + } + if isUnique, err := idx.Unique(); !isUnique { + t.Fatalf("Index is not unique!") + } else if err != nil { + t.Fatal(err) + } + + // First message insert should succeed + testMsgId := channel.MakeMessageID([]byte(testString), &id.ID{1}) + testMsg := buildMessage([]byte(testString), testMsgId.Bytes(), nil, + testString, testString, []byte{8, 6, 7, 5}, 0, netTime.Now(), + time.Second, 0, 0, channels.Sent) + _, err = eventModel.receiveHelper(testMsg) + if err != nil { + t.Fatal(err) + } + + // The duplicate entry won't fail, it just silently shouldn't happen + _, err = eventModel.receiveHelper(testMsg) + if err != nil { + t.Fatalf("%+v", err) + } + results, err := eventModel.dump(messageStoreName) + if err != nil { + t.Fatalf("%+v", err) + } + if len(results) != 1 { + t.Fatalf("Expected only a single message, got %d", len(results)) + } +} -- GitLab