package store import ( "os" "testing" "git.p78su.freemyip.com/svi/gostore/pkg/mock/mock_service" ) type tester struct { t *testing.T serv *mock_service.MockService store *Store } func TestStore(t *testing.T) { fnClear := func() { _ = os.RemoveAll("./store") } fnClear() defer fnClear() sf := &tester{ t: t, } sf.create() sf.put() sf.get() sf.find() sf.del() sf.close() } // Закрытие хранилища func (sf *tester) close() { sf.t.Log("close") sf.serv.CancelApp() sf.store.close() if err := sf.store.Del("key"); err == nil { sf.t.Fatalf("close(): err==nil") } lstKey, err := sf.store.Find("key") if err == nil { sf.t.Fatalf("close(): err==nil") } if lstKey != nil { sf.t.Fatalf("close(): lstKey!=nil") } if err := sf.store.Put("key2", []byte("val")); err == nil { sf.t.Fatalf("close(): err==nil") } binVal, err := sf.store.Get("key2") if err == nil { sf.t.Fatalf("close(): err==nil") } if binVal != nil { sf.t.Fatalf("close(): binVal!=nil") } } // Удалет ключ из хранилища func (sf *tester) del() { sf.t.Log("del") err := sf.store.Del("k") if err != nil { sf.t.Fatalf("del(): err=%v", err) } } // Ищет ключи по префиксу func (sf *tester) find() { sf.t.Log("find") lstKey, err := sf.store.Find("key") if err != nil { sf.t.Fatalf("find(): err=%v", err) } if len(lstKey) != 1 { sf.t.Fatalf("find(): len(lstKey)=%v", len(lstKey)) } } // get -- проверяет получение значения из хранилища func (sf *tester) get() { sf.t.Log("get") sf.getBad1() sf.getGood1() } func (sf *tester) getGood1() { sf.t.Log("getGood1") binVal, err := sf.store.Get("key") if err != nil { sf.t.Fatalf("getGood1(): err=%v", err) } if binVal == nil { sf.t.Fatalf("getGood1(): binVal==nil") } if len(binVal) != 0 { sf.t.Fatalf("getGood1(): len(binVal)=%v", len(binVal)) } } // Нет такого ключа func (sf *tester) getBad1() { sf.t.Log("getBad1") _, err := sf.store.Get("ke") if err == nil { sf.t.Fatalf("getBad1(): err==nil") } } // put -- проверяет размещение ключа в хранилище func (sf *tester) put() { sf.t.Log("put") sf.putBad1() sf.putGood1() } func (sf *tester) putGood1() { sf.t.Log("putGood1") err := sf.store.Put("key", nil) if err != nil { sf.t.Fatalf("putGood1(): err=%v", err) } } // putBad1 -- нет ключа для хранилища func (sf *tester) putBad1() { sf.t.Log("putBad1") err := sf.store.Put("", nil) if err == nil { sf.t.Fatalf("putBad1(): err==nil") } } // create -- создает хранилище func (sf *tester) create() { sf.t.Log("create") sf.createBad1() sf.createBad2() sf.createGood1() } func (sf *tester) createGood1() { sf.t.Log("createGood1") var err error sf.store, err = NewStore(sf.serv) if err != nil { sf.t.Fatalf("createGood1(): in create IStoreDisk, err=\n\t%v", err) } if sf.store == nil { sf.t.Fatalf("createGood1(): store==nil") } } // Испорчена переменная модуля func (sf *tester) createBad2() { sf.t.Log("createBad2") sf.serv = mock_service.NewMockService() IsBad_ = true store, err := NewStore(sf.serv) if err == nil { sf.t.Fatalf("createBad2(): err==nil") } if store != nil { sf.t.Fatalf("createBad2(): store!=nil") } IsBad_ = false } // createBad1 -- нет объекта сервиса func (sf *tester) createBad1() { sf.t.Log("createBad1") store, err := NewStore(nil) if err == nil { sf.t.Fatalf("createBad1(): err==nil") } if store != nil { sf.t.Fatalf("createBad1(): store!=nil") } }