131 lines
2.8 KiB
Go
131 lines
2.8 KiB
Go
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())
|
|
}
|
|
}
|
|
|
|
|
|
|