package myMap_test import "seekia/internal/myDatastores/myMap" import "seekia/internal/appUsers" import "seekia/internal/localFilesystem" import "testing" import "strconv" import "sync" func TestMyMap(t *testing.T) { err := localFilesystem.InitializeAppDatastores() if (err != nil){ t.Fatalf("Failed to initialize app datastores: " + err.Error()) } err = appUsers.InitializeAppUserForTests(false, false) if (err != nil){ t.Fatalf("Failed to initalize app user for tests: " + err.Error()) } newMapObject, err := myMap.CreateNewMap("TestMap") if (err != nil) { t.Fatalf("Failed to create new map: " + err.Error()) } err = newMapObject.DeleteMap() if (err != nil) { t.Fatalf("Failed to delete map: " + err.Error()) } _, err = newMapObject.GetMap() if (err != nil) { t.Fatalf("Failed to get new map: " + err.Error()) } err = newMapObject.SetMapEntry("TestKeyA", "TestValueA") if (err != nil) { t.Fatalf("Failed to add map entry: " + err.Error()) } err = newMapObject.SetMapEntry("TestKeyB", "TestValueB") if (err != nil) { t.Fatalf("Failed to add map entry: " + err.Error()) } exists, entryValue, err := newMapObject.GetMapEntry("TestKeyA") if (err != nil) { t.Fatalf("Failed to get map value: " + err.Error()) } if (exists == false) { t.Fatalf("Failed to get map value.") } if (entryValue != "TestValueA"){ t.Fatalf("Map value does not match.") } err = newMapObject.DeleteMapEntry("TestKeyA") if (err != nil){ t.Fatalf("Failed to delete map entry: " + err.Error()) } exists, _, err = newMapObject.GetMapEntry("TestKeyA") if (err != nil) { t.Fatalf("Failed to get map value: " + err.Error()) } if (exists == true) { t.Fatalf("Failed to delete map value.") } err = newMapObject.DeleteMap() if (err != nil) { t.Fatalf("Failed to delete map: " + err.Error()) } exists, _, err = newMapObject.GetMapEntry("TestKeyB") if (err != nil) { t.Fatalf("Failed to get map entry: " + err.Error()) } if (exists == true) { t.Fatalf("Failed to delete map.") } // Now we test concurrency err = newMapObject.SetMapEntry("TestA", "TestB") if (err != nil) { t.Fatalf("Failed to add map entry: " + err.Error()) } currentMap, err := newMapObject.GetMap() if (err != nil) { t.Fatalf("Failed to get map: " + err.Error()) } var mapWaitgroup sync.WaitGroup for i:=0; i<1000; i++{ mapWaitgroup.Add(1) indexString := strconv.Itoa(i) addFunction := func(){ err := newMapObject.SetMapEntry("TestKey" + indexString, "TestValue" + indexString) if (err != nil) { t.Fatalf("Failed to add map value: " + err.Error()) } mapWaitgroup.Done() } go addFunction() } mapWaitgroup.Wait() if (len(currentMap) != 1){ t.Fatalf("Map not copied.") } err = newMapObject.DeleteMap() if (err != nil) { t.Fatalf("Failed to delete map: " + err.Error()) } }