seekia/internal/myDatastores/myMapList/myMapList_test.go

232 lines
5.4 KiB
Go
Raw Normal View History

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.")
}
}