v1 complete and tests complete (for now. 😉).
This commit is contained in:
150
item_funcs_test.go
Normal file
150
item_funcs_test.go
Normal file
@@ -0,0 +1,150 @@
|
||||
package gosecret
|
||||
|
||||
import (
|
||||
`reflect`
|
||||
`testing`
|
||||
)
|
||||
|
||||
// Some functions are covered in the Service tests and Collection tests.
|
||||
|
||||
/*
|
||||
TestItem tests all remaining Item funcs (see Service and Collection funcs for the other tests.
|
||||
|
||||
*/
|
||||
func TestItem(t *testing.T) {
|
||||
|
||||
var svc *Service
|
||||
var collection *Collection
|
||||
var item *Item
|
||||
var secret *Secret
|
||||
var newItemLabel string
|
||||
var testLabel string
|
||||
var attrs map[string]string
|
||||
var modAttrs map[string]string
|
||||
var newAttrs map[string]string
|
||||
var newAttrsGnome map[string]string
|
||||
var typeString string
|
||||
var err error
|
||||
|
||||
// Setup.
|
||||
if svc, err = NewService(); err != nil {
|
||||
t.Fatalf("NewService failed: %v", err.Error())
|
||||
}
|
||||
|
||||
if collection, err = svc.CreateCollection(collectionName.String()); err != nil {
|
||||
t.Errorf("could not create collection '%v': %v", collectionName.String(), err.Error())
|
||||
if err = svc.Close(); err != nil {
|
||||
t.Fatalf("could not close Service.Session: %v", err.Error())
|
||||
}
|
||||
return
|
||||
} else {
|
||||
t.Logf("created collection '%v' at path '%v' successfully", collectionName.String(), string(collection.Dbus.Path()))
|
||||
}
|
||||
|
||||
// Create an Item/Secret.
|
||||
secret = NewSecret(svc.Session, []byte{}, []byte(testSecretContent), "text/plain")
|
||||
|
||||
if item, err = collection.CreateItem(testItemLabel, itemAttrs, secret, true); err != nil {
|
||||
t.Errorf("could not create item %v in collection '%v': %v", testItemLabel, collectionName.String(), err.Error())
|
||||
if err = svc.Close(); err != nil {
|
||||
t.Fatalf("could not close Service.Session: %v", err.Error())
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// Fetch attributes
|
||||
if attrs, err = item.Attributes(); err != nil {
|
||||
t.Errorf("failed to fetch attributes for item %v in collection '%v': %v", testItemLabel, collectionName.String(), err.Error())
|
||||
} else {
|
||||
t.Logf(
|
||||
"Fetch result; original attributes: %#v, fetched attributes: %#v for item '%v' in '%v'",
|
||||
itemAttrs, attrs, testItemLabel, collectionName.String(),
|
||||
)
|
||||
}
|
||||
|
||||
newAttrs = map[string]string{
|
||||
"foo": "bar",
|
||||
"bar": "baz",
|
||||
"baz": "quux",
|
||||
}
|
||||
|
||||
// Replace attributes.
|
||||
if err = item.ReplaceAttributes(newAttrs); err != nil {
|
||||
t.Errorf("could not replace attributes for item '%v' in collection '%v': %v", testItemLabel, collectionName.String(), err.Error())
|
||||
} else {
|
||||
// Modify attributes.
|
||||
// "flat" modification.
|
||||
modAttrs = map[string]string{
|
||||
"foo": "quux",
|
||||
}
|
||||
if err = item.ModifyAttributes(modAttrs); err != nil {
|
||||
t.Errorf(
|
||||
"could not modify attributes for item '%v' in collection '%v' (%#v => %#v): %v",
|
||||
testItemLabel, collectionName.String(), newAttrs, modAttrs, err.Error(),
|
||||
)
|
||||
}
|
||||
// "delete" modification.
|
||||
newAttrs = map[string]string{
|
||||
"foo": "quux",
|
||||
"bar": "baz",
|
||||
}
|
||||
newAttrsGnome = make(map[string]string, 0)
|
||||
for k, v := range newAttrs {
|
||||
newAttrsGnome[k] = v
|
||||
}
|
||||
// Added via SecretService automatically? Seahorse? It appears sometimes and others it does not. Cause is unknown.
|
||||
newAttrsGnome["xdg:schema"] = DbusDefaultItemType
|
||||
modAttrs = map[string]string{
|
||||
"baz": ExplicitAttrEmptyValue,
|
||||
}
|
||||
|
||||
if err = item.ModifyAttributes(modAttrs); err != nil {
|
||||
t.Errorf(
|
||||
"could not modify (with deletion) attributes for item '%v' in collection '%v' (%#v => %#v): %v",
|
||||
testItemLabel, collectionName.String(), newAttrs, modAttrs, err.Error(),
|
||||
)
|
||||
} else {
|
||||
if attrs, err = item.Attributes(); err != nil {
|
||||
t.Errorf("failed to fetch attributes for item %v in collection '%v': %v", testItemLabel, collectionName.String(), err.Error())
|
||||
}
|
||||
if !reflect.DeepEqual(attrs, newAttrs) && !reflect.DeepEqual(attrs, newAttrsGnome) {
|
||||
t.Errorf("newly-modified attributes (%#v) do not match expected attributes (%#v)", attrs, newAttrs)
|
||||
} else {
|
||||
t.Logf("modified attributes (%#v) match expected attributes (%#v)", attrs, newAttrs)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Item.Relabel
|
||||
newItemLabel = testItemLabel + "_RELABELED"
|
||||
if err = item.Relabel(newItemLabel); err != nil {
|
||||
t.Errorf("failed to relabel item '%v' to '%v': %v", testItemLabel, newItemLabel, err.Error())
|
||||
}
|
||||
if testLabel, err = item.Label(); err != nil {
|
||||
t.Errorf("failed to fetch label for '%v': %v", string(item.Dbus.Path()), err.Error())
|
||||
}
|
||||
if newItemLabel != testLabel {
|
||||
t.Errorf("new item label post-relabeling ('%v') does not match explicitly set label ('%v')", testLabel, newItemLabel)
|
||||
}
|
||||
|
||||
// And Item.Type.
|
||||
if typeString, err = item.Type(); err != nil {
|
||||
t.Errorf("failed to get Item.Type for '%v': %v", string(item.Dbus.Path()), err.Error())
|
||||
} else {
|
||||
if typeString != DbusDefaultItemType {
|
||||
t.Errorf("Item.Type mismatch for '%v': '%v' (should be '%v')", string(item.Dbus.Path()), typeString, DbusDefaultItemType)
|
||||
}
|
||||
t.Logf("item type for '%v': %v", string(item.Dbus.Path()), typeString)
|
||||
}
|
||||
|
||||
// Teardown.
|
||||
if err = item.Delete(); err != nil {
|
||||
t.Errorf("failed to delete item '%v': %v", string(item.Dbus.Path()), err.Error())
|
||||
}
|
||||
if err = collection.Delete(); err != nil {
|
||||
t.Errorf("failed to delete collection '%v': %v", collectionName.String(), err.Error())
|
||||
}
|
||||
if err = svc.Close(); err != nil {
|
||||
t.Errorf("could not close Service.Session: %v", err.Error())
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user