232 lines
5.4 KiB
Go
232 lines
5.4 KiB
Go
|
package myMapList_test
|
||
|
|
||
|
import "testing"
|
||
|
|
||
|
import "seekia/internal/myDatastores/myMapList"
|
||
|
|
||
|
import "seekia/internal/appUsers"
|
||
|
import "seekia/internal/helpers"
|
||
|
import "seekia/internal/localFilesystem"
|
||
|
|
||
|
import "sync"
|
||
|
|
||
|
func TestAddDeleteMapListData(t *testing.T) {
|
||
|
|
||
|
err := localFilesystem.InitializeAppDatastores()
|
||
|
if (err != nil){
|
||
|
t.Fatalf("Failed to initialize app datastores: " + err.Error())
|
||
|
}
|
||
|
err = appUsers.InitializeAppUserForTests()
|
||
|
if (err != nil){
|
||
|
t.Fatalf("Failed to initalize app user for tests: " + err.Error())
|
||
|
}
|
||
|
|
||
|
newMapListObject, err := myMapList.CreateNewMapList("TestMapList")
|
||
|
if (err != nil) {
|
||
|
t.Fatalf("Failed to create new map: " + err.Error())
|
||
|
}
|
||
|
|
||
|
err = newMapListObject.DeleteMapList()
|
||
|
if (err != nil) {
|
||
|
t.Fatalf("Failed to delete map list: " + err.Error())
|
||
|
}
|
||
|
|
||
|
_, err = newMapListObject.GetMapList()
|
||
|
if (err != nil) {
|
||
|
t.Fatalf("Failed to get new map list: " + err.Error())
|
||
|
}
|
||
|
|
||
|
newMapA := map[string]string{
|
||
|
"TestKeyA": "TestValueA",
|
||
|
}
|
||
|
err = newMapListObject.AddMapListItem(newMapA)
|
||
|
if (err != nil) {
|
||
|
t.Fatalf("Failed to add map list item: " + err.Error())
|
||
|
}
|
||
|
|
||
|
newMapB := map[string]string{
|
||
|
"TestKeyB": "TestValueB",
|
||
|
}
|
||
|
err = newMapListObject.AddMapListItem(newMapB)
|
||
|
if (err != nil) {
|
||
|
t.Fatalf("Failed to add map list item: " + err.Error())
|
||
|
}
|
||
|
|
||
|
lookupMapA := map[string]string{
|
||
|
"TestKeyA": "WrongValue",
|
||
|
}
|
||
|
exists, retrievedMapListItems, err := newMapListObject.GetMapListItems(lookupMapA)
|
||
|
if (err != nil) {
|
||
|
t.Fatalf("Failed to get map list items: " + err.Error())
|
||
|
}
|
||
|
if (exists == true) {
|
||
|
t.Fatalf("Failed to get map list item: Returning items we should not get.")
|
||
|
}
|
||
|
|
||
|
lookupMapB := map[string]string{
|
||
|
"TestKeyA": "TestValueA",
|
||
|
}
|
||
|
exists, retrievedMapListItems, err = newMapListObject.GetMapListItems(lookupMapB)
|
||
|
if (err != nil) {
|
||
|
t.Fatalf("Failed to get map list items: " + err.Error())
|
||
|
}
|
||
|
if (exists == false) {
|
||
|
t.Fatalf("Failed to get map list item.")
|
||
|
}
|
||
|
|
||
|
if (len(retrievedMapListItems) != 1){
|
||
|
t.Fatalf("Map list retrieved items list is not correct length.")
|
||
|
}
|
||
|
|
||
|
returnedMap := retrievedMapListItems[0]
|
||
|
|
||
|
if (len(returnedMap) != 1){
|
||
|
t.Fatalf("Map list value does not match.")
|
||
|
}
|
||
|
|
||
|
returnedValue, exists := returnedMap["TestKeyA"]
|
||
|
if (exists == false) {
|
||
|
t.Fatalf("Map list retrieved item TestKeyA key not found.")
|
||
|
}
|
||
|
if (returnedValue != "TestValueA"){
|
||
|
t.Fatalf("Map list retrieved item value does not match.")
|
||
|
}
|
||
|
|
||
|
err = newMapListObject.DeleteMapListItems(lookupMapB)
|
||
|
if (err != nil){
|
||
|
t.Fatalf("Failed to delete map list items: " + err.Error())
|
||
|
}
|
||
|
|
||
|
exists, _, err = newMapListObject.GetMapListItems(lookupMapB)
|
||
|
if (err != nil) {
|
||
|
t.Fatalf("Failed to get map list items: " + err.Error())
|
||
|
}
|
||
|
if (exists == true) {
|
||
|
t.Fatalf("Failed to delete map list item.")
|
||
|
}
|
||
|
|
||
|
err = newMapListObject.DeleteMapList()
|
||
|
if (err != nil) {
|
||
|
t.Fatalf("Failed to delete map list: " + err.Error())
|
||
|
}
|
||
|
|
||
|
exists, _, err = newMapListObject.GetMapListItems(newMapB)
|
||
|
if (err != nil) {
|
||
|
t.Fatalf("Failed to get map list items: " + err.Error())
|
||
|
}
|
||
|
if (exists == true) {
|
||
|
t.Fatalf("Failed to delete map list.")
|
||
|
}
|
||
|
|
||
|
// Now we test concurrency
|
||
|
|
||
|
newMapC := map[string]string{
|
||
|
"TestKeyC": "TestValueC",
|
||
|
}
|
||
|
err = newMapListObject.AddMapListItem(newMapC)
|
||
|
if (err != nil) {
|
||
|
t.Fatalf("Failed to add map list item: " + err.Error())
|
||
|
}
|
||
|
|
||
|
currentMapList, err := newMapListObject.GetMapList()
|
||
|
if (err != nil) {
|
||
|
t.Fatalf("Failed to get map: " + err.Error())
|
||
|
}
|
||
|
|
||
|
// Now we test concurrency
|
||
|
|
||
|
var mapWaitgroup sync.WaitGroup
|
||
|
|
||
|
for i:=0; i<1000; i++{
|
||
|
|
||
|
mapWaitgroup.Add(1)
|
||
|
|
||
|
indexString := helpers.ConvertIntToString(i)
|
||
|
|
||
|
addFunction := func(){
|
||
|
|
||
|
newItem := make(map[string]string)
|
||
|
newItem["TestKey" + indexString] = "TestValue" + indexString
|
||
|
|
||
|
err := newMapListObject.AddMapListItem(newItem)
|
||
|
if (err != nil) {
|
||
|
t.Fatalf("Failed to add map list item: " + err.Error())
|
||
|
}
|
||
|
|
||
|
mapWaitgroup.Done()
|
||
|
}
|
||
|
|
||
|
go addFunction()
|
||
|
}
|
||
|
|
||
|
mapWaitgroup.Wait()
|
||
|
|
||
|
if (len(currentMapList) != 1){
|
||
|
t.Fatalf("Map list not copied.")
|
||
|
}
|
||
|
|
||
|
err = newMapListObject.DeleteMapList()
|
||
|
if (err != nil) {
|
||
|
t.Fatalf("Failed to delete map list: " + err.Error())
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
func TestMapListCopying(t *testing.T){
|
||
|
|
||
|
err := localFilesystem.InitializeAppDatastores()
|
||
|
if (err != nil){
|
||
|
t.Fatalf("Failed to initialize app datastores: " + err.Error())
|
||
|
}
|
||
|
err = appUsers.InitializeAppUserForTests()
|
||
|
if (err != nil){
|
||
|
t.Fatalf("Failed to initalize app user for tests: " + err.Error())
|
||
|
}
|
||
|
|
||
|
newMapListObject, err := myMapList.CreateNewMapList("TestMapList")
|
||
|
if (err != nil) {
|
||
|
t.Fatalf("Failed to create new map: " + err.Error())
|
||
|
}
|
||
|
|
||
|
err = newMapListObject.DeleteMapList()
|
||
|
if (err != nil) {
|
||
|
t.Fatalf("Failed to delete map list: " + err.Error())
|
||
|
}
|
||
|
|
||
|
testMapList := make([]map[string]string, 0, 1)
|
||
|
|
||
|
testMapA := map[string]string{
|
||
|
"TestMapA": "TestValueA",
|
||
|
}
|
||
|
|
||
|
testMapList = append(testMapList, testMapA)
|
||
|
|
||
|
err = newMapListObject.OverwriteMapList(testMapList)
|
||
|
if (err != nil) {
|
||
|
t.Fatalf("Failed to overwrite map list: " + err.Error())
|
||
|
}
|
||
|
|
||
|
existingMapListA, err := newMapListObject.GetMapList()
|
||
|
if (err != nil) {
|
||
|
t.Fatalf("Failed to get map list: " + err.Error())
|
||
|
}
|
||
|
|
||
|
existingMapA := existingMapListA[0]
|
||
|
existingMapA["TestMapC"] = "TestValueC"
|
||
|
|
||
|
existingMapB, err := newMapListObject.GetMapList()
|
||
|
if (err != nil) {
|
||
|
t.Fatalf("Failed to get map list: " + err.Error())
|
||
|
}
|
||
|
|
||
|
existingMapItem := existingMapB[0]
|
||
|
|
||
|
_, exists := existingMapItem["TestMapC"]
|
||
|
if (exists == true) {
|
||
|
t.Fatalf("Map list not copied on GetMapList.")
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
|