From 42aa7b4f6248a92bc3530f2fbeb866ee49c38ab1 Mon Sep 17 00:00:00 2001 From: Vlad Date: Fri, 28 Oct 2016 17:12:58 +0200 Subject: [PATCH] whisper: new api tests added + bugfix --- whisper/shhapi/api_test.go | 187 ++++++++++++++++++++++------------- whisper/whisperv5/whisper.go | 5 + 2 files changed, 125 insertions(+), 67 deletions(-) diff --git a/whisper/shhapi/api_test.go b/whisper/shhapi/api_test.go index fa804ef945..8ce198595e 100644 --- a/whisper/shhapi/api_test.go +++ b/whisper/shhapi/api_test.go @@ -24,6 +24,7 @@ import ( ) func TestBasic(x *testing.T) { + var id string = "test" api := NewPublicWhisperAPI() if api == nil { x.Errorf("failed to create API.") @@ -41,77 +42,129 @@ func TestBasic(x *testing.T) { return } - var id string = "test" - - exist, err := api.HasIdentity(id) - if err != nil { - x.Errorf("failed HasIdentity: %s.", err) - return - } - if exist { - x.Errorf("failed HasIdentity: false positive.") - return - } - - exist, err = api.HasSymKey(id) - if err != nil { - x.Errorf("failed HasSymKey: %s.", err) - return - } - if exist { - x.Errorf("failed HasSymKey: false positive.") - return - } - - err = api.DeleteIdentity(id) - if err != nil { - x.Errorf("failed DeleteIdentity: %s.", err) - return - } - - pub, err := api.NewIdentity() - if err != nil { - x.Errorf("failed NewIdentity: %s.", err) - return - } - if len(pub) == 0 { - x.Errorf("NewIdentity: empty") - return - } - - //spub := string(crypto.FromECDSAPub(pub)) - //fmt.Printf("%s \n", pub) - - exist, err = api.HasIdentity(pub) - if err != nil { - x.Errorf("failed HasIdentity: %s.", err) - return - } - if !exist { - x.Errorf("failed HasIdentity: false negative.") - return - } - - err = api.DeleteIdentity(pub) - if err != nil { - x.Errorf("failed DeleteIdentity 2: %s.", err) - return - } - - exist, err = api.HasIdentity(pub) - if err != nil { - x.Errorf("failed HasIdentity 3: %s.", err) - return - } - if exist { - x.Errorf("failed HasIdentity 3: false positive.") - return - } - var hexnum rpc.HexNumber mail := api.GetFilterChanges(hexnum) if len(mail) != 0 { x.Errorf("failed GetFilterChanges") return } + + exist, err := api.HasIdentity(id) + if err != nil { + x.Errorf("failed 1 HasIdentity: %s.", err) + return + } + if exist { + x.Errorf("failed 2 HasIdentity: false positive.") + return + } + + err = api.DeleteIdentity(id) + if err != nil { + x.Errorf("failed 3 DeleteIdentity: %s.", err) + return + } + + pub, err := api.NewIdentity() + if err != nil { + x.Errorf("failed 4 NewIdentity: %s.", err) + return + } + if len(pub) == 0 { + x.Errorf("NewIdentity 5: empty") + return + } + + exist, err = api.HasIdentity(pub) + if err != nil { + x.Errorf("failed 6 HasIdentity: %s.", err) + return + } + if !exist { + x.Errorf("failed 7 HasIdentity: false negative.") + return + } + + err = api.DeleteIdentity(pub) + if err != nil { + x.Errorf("failed 8 DeleteIdentity: %s.", err) + return + } + + exist, err = api.HasIdentity(pub) + if err != nil { + x.Errorf("failed 9 HasIdentity: %s.", err) + return + } + if exist { + x.Errorf("failed 10 HasIdentity: false positive.") + return + } + + id = "arbitrary text" + id2 := "another arbitrary string" + + exist, err = api.HasSymKey(id) + if err != nil { + x.Errorf("failed 11 HasSymKey: %s.", err) + return + } + if exist { + x.Errorf("failed 12 HasSymKey: false positive.") + return + } + + err = api.GenerateSymKey(id) + if err != nil { + x.Errorf("failed 13 GenerateSymKey: %s.", err) + return + } + + exist, err = api.HasSymKey(id) + if err != nil { + x.Errorf("failed 14 HasSymKey: %s.", err) + return + } + if !exist { + x.Errorf("failed 15 HasSymKey: false negative.") + return + } + + err = api.AddSymKey(id, []byte("some stuff here")) + if err == nil { + x.Errorf("failed 16 AddSymKey: %s.", err) + return + } + + err = api.AddSymKey(id2, []byte("some stuff here")) + if err != nil { + x.Errorf("failed 17 AddSymKey: %s.", err) + return + } + + exist, err = api.HasSymKey(id2) + if err != nil { + x.Errorf("failed 18 HasSymKey: %s.", err) + return + } + if !exist { + x.Errorf("failed 19 HasSymKey: false negative.") + return + } + + err = api.DeleteSymKey(id) + if err != nil { + x.Errorf("failed 20 DeleteSymKey: %s.", err) + return + } + + exist, err = api.HasSymKey(id) + if err != nil { + x.Errorf("failed 21 HasSymKey: %s.", err) + return + } + if exist { + x.Errorf("failed 22 HasSymKey: false positive.") + return + } } diff --git a/whisper/whisperv5/whisper.go b/whisper/whisperv5/whisper.go index cfc3849489..8368108244 100644 --- a/whisper/whisperv5/whisper.go +++ b/whisper/whisperv5/whisper.go @@ -216,6 +216,11 @@ func (w *Whisper) AddSymKey(name string, key []byte) error { w.keyMu.Lock() defer w.keyMu.Unlock() + + // double check is necessary, because deriveKeyMaterial() is slow + if w.symKeys[name] != nil { + return fmt.Errorf("Key with name [%s] already exists", name) + } w.symKeys[name] = derived return nil }