whisper: new api tests added + bugfix

This commit is contained in:
Vlad 2016-10-28 17:12:58 +02:00
parent 40b83c27ab
commit 42aa7b4f62
2 changed files with 125 additions and 67 deletions

View file

@ -24,6 +24,7 @@ import (
) )
func TestBasic(x *testing.T) { func TestBasic(x *testing.T) {
var id string = "test"
api := NewPublicWhisperAPI() api := NewPublicWhisperAPI()
if api == nil { if api == nil {
x.Errorf("failed to create API.") x.Errorf("failed to create API.")
@ -41,77 +42,129 @@ func TestBasic(x *testing.T) {
return 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 var hexnum rpc.HexNumber
mail := api.GetFilterChanges(hexnum) mail := api.GetFilterChanges(hexnum)
if len(mail) != 0 { if len(mail) != 0 {
x.Errorf("failed GetFilterChanges") x.Errorf("failed GetFilterChanges")
return 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
}
} }

View file

@ -216,6 +216,11 @@ func (w *Whisper) AddSymKey(name string, key []byte) error {
w.keyMu.Lock() w.keyMu.Lock()
defer w.keyMu.Unlock() 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 w.symKeys[name] = derived
return nil return nil
} }