123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218 |
- /*
- * EliasDB
- *
- * Copyright 2016 Matthias Ladkau. All rights reserved.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
- package graphstorage
- import (
- "errors"
- "flag"
- "fmt"
- "os"
- "testing"
- "devt.de/krotik/common/datautil"
- "devt.de/krotik/common/fileutil"
- "devt.de/krotik/eliasdb/storage"
- )
- const diskGraphStorageTestDBDir = "diskgraphstoragetest1"
- const diskGraphStorageTestDBDir2 = "diskgraphstoragetest2"
- var dbdirs = []string{diskGraphStorageTestDBDir, diskGraphStorageTestDBDir2}
- const invalidFileName = "**" + string(0x0)
- // Main function for all tests in this package
- func TestMain(m *testing.M) {
- flag.Parse()
- for _, dbdir := range dbdirs {
- if res, _ := fileutil.PathExists(dbdir); res {
- if err := os.RemoveAll(dbdir); err != nil {
- fmt.Print("Could not remove test directory:", err.Error())
- }
- }
- }
- // Run the tests
- res := m.Run()
- // Teardown
- for _, dbdir := range dbdirs {
- if res, _ := fileutil.PathExists(dbdir); res {
- if err := os.RemoveAll(dbdir); err != nil {
- fmt.Print("Could not remove test directory:", err.Error())
- }
- }
- }
- os.Exit(res)
- }
- func TestDiskGraphStorage(t *testing.T) {
- dgsnew, err := NewDiskGraphStorage(diskGraphStorageTestDBDir, false)
- if err != nil {
- t.Error(err)
- return
- }
- if res := dgsnew.Name(); res != diskGraphStorageTestDBDir {
- t.Error("Unexpected name:", res)
- return
- }
- // Check that the storage directory exists
- if res, _ := fileutil.PathExists(diskGraphStorageTestDBDir); !res {
- t.Error("Storage directory does not exist")
- return
- }
- if res, _ := fileutil.PathExists(diskGraphStorageTestDBDir + "/" + FilenameNameDB); !res {
- t.Error("Name DB does not exist")
- return
- }
- // Get a storage file
- sm1 := dgsnew.StorageManager("store1.nodes", true)
- if sm1 == nil {
- t.Error("Unexpected result")
- return
- }
- if res, _ := fileutil.PathExists(diskGraphStorageTestDBDir + "/store1.nodes.db.0"); !res {
- t.Error("Storage file does not exist")
- return
- }
- sm2 := dgsnew.StorageManager("store2.nodes", false)
- if res, _ := fileutil.PathExists(diskGraphStorageTestDBDir + "/store2.nodes.db.0"); res {
- t.Error("Storage file should not have been created")
- return
- }
- if sm2 != nil {
- t.Error("Unexpected result")
- return
- }
- m := dgsnew.MainDB()
- m["test1"] = "test1value"
- dgsnew.FlushMain()
- dgsnew.RollbackMain()
- if err := dgsnew.FlushAll(); err != nil {
- t.Error("Unexpected error return:", err)
- }
- if err := dgsnew.Close(); err != nil {
- t.Error(err)
- return
- }
- // Open the storage again to make sure we can load it
- dgs, err := NewDiskGraphStorage(diskGraphStorageTestDBDir, false)
- if err != nil {
- t.Error(err)
- return
- }
- if res := dgs.MainDB()["test1"]; res != "test1value" {
- t.Error("Unexpected value in mainDB value:", res)
- return
- }
- // Check readonly mode
- dgs.(*DiskGraphStorage).readonly = true
- if err := dgs.RollbackMain(); err.Error() != "GraphError: Failed write to readonly storage (Cannot rollback main db)" {
- t.Error("Unexpected error return:", err)
- }
- if err := dgs.FlushMain(); err.Error() != "GraphError: Failed write to readonly storage (Cannot flush main db)" {
- t.Error("Unexpected error return:", err)
- }
- if err := dgs.FlushAll(); err != nil {
- t.Error("Unexpected error return:", err)
- }
- if err := dgs.Close(); err != nil {
- t.Error(err)
- return
- }
- }
- func TestDiskGraphStorageErrors(t *testing.T) {
- _, err := NewDiskGraphStorage(invalidFileName, false)
- if err == nil {
- t.Error("Unexpected new disk graph storage result")
- return
- }
- // Test names map error case
- old := FilenameNameDB
- FilenameNameDB = invalidFileName
- _, err = NewDiskGraphStorage(diskGraphStorageTestDBDir2, false)
- if err == nil {
- t.Error("Unexpected new disk graph storage result")
- FilenameNameDB = old
- return
- }
- _, err = NewDiskGraphStorage(diskGraphStorageTestDBDir2, false)
- if err == nil {
- t.Error("Unexpected new disk graph storage result")
- FilenameNameDB = old
- return
- }
- FilenameNameDB = old
- dgs := &DiskGraphStorage{invalidFileName, false, nil,
- make(map[string]storage.Manager)}
- pm, _ := datautil.NewPersistentStringMap(invalidFileName)
- dgs.mainDB = pm
- msm := storage.NewMemoryStorageManager("test")
- dgs.storagemanagers["test"] = msm
- storage.MsmRetFlush = errors.New("TestError")
- storage.MsmRetClose = errors.New("TestError")
- if err := dgs.RollbackMain(); err == nil {
- t.Error("Unexpected flush result")
- return
- }
- if err := dgs.FlushMain(); err == nil {
- t.Error("Unexpected flush result")
- return
- }
- if err := dgs.FlushAll(); err == nil {
- t.Error("Unexpected flush all result")
- return
- }
- if err := dgs.Close(); err == nil {
- t.Error("Unexpected close result")
- return
- }
- }
|