blob: 6e20ad4fba6e5aba528758d0b4f8f84a84cb75e2 [file] [log] [blame]
package revocation
import (
"os"
"path/filepath"
"reflect"
"testing"
"time"
"veyron.io/veyron/veyron/security/audit"
"veyron.io/veyron/veyron/services/security/discharger"
"veyron.io/veyron/veyron2/rt"
"veyron.io/veyron/veyron2/security"
)
type auditor struct {
LastEntry audit.Entry
}
func (a *auditor) Audit(entry audit.Entry) error {
a.LastEntry = entry
return nil
}
func newAuditedPrivateID(a *auditor) (security.PrivateID, error) {
r, err := rt.New()
if err != nil {
return nil, err
}
defer r.Cleanup()
id := r.Identity()
if err != nil {
return nil, err
}
return audit.NewPrivateID(id, a), err
}
func TestReadBlessAudit(t *testing.T) {
var a auditor
var revocationDir = filepath.Join(os.TempDir(), "util_bless_test_dir")
os.MkdirAll(revocationDir, 0700)
defer os.RemoveAll(revocationDir)
self, err := newAuditedPrivateID(&a)
if err != nil {
t.Fatalf("failed to create new audited private id: %v", err)
}
// Test caveat
correct_blessee := self.PublicID()
_, cav, err := discharger.NewRevocationCaveat(self.PublicID(), "")
if err != nil {
t.Fatalf("discharger.NewRevocationCaveat failed: %v", err)
}
correct_blessed, err := Bless(self, self.PublicID(), "test", time.Second, cav)
if err != nil {
t.Fatalf("Bless: failed with caveats: %v", err)
}
var blessEntry BlessingAuditEntry
blessEntry, err = ReadBlessAuditEntry(a.LastEntry)
if err != nil {
t.Fatal("ReadBlessAuditEntryFailed %v:", err)
}
if !reflect.DeepEqual(blessEntry.Blessee, correct_blessee) {
t.Errorf("blessee incorrect: expected %v got %v", correct_blessee, blessEntry.Blessee)
}
if !reflect.DeepEqual(blessEntry.Blessed, correct_blessed) {
t.Errorf("blessed incorrect: expected %v got %v", correct_blessed, blessEntry.Blessed)
}
if blessEntry.RevocationCaveat.ID() != cav.ID() {
t.Errorf("caveat ID incorrect: expected %s got %s", cav.ID(), blessEntry.RevocationCaveat.ID())
}
// Test no caveat
correct_blessed, err = Bless(self, self.PublicID(), "test", time.Second, nil)
if err != nil {
t.Fatalf("Bless: failed with no caveats: %v", err)
}
blessEntry, err = ReadBlessAuditEntry(a.LastEntry)
if err != nil {
t.Fatal("ReadBlessAuditEntryFailed %v:", err)
}
if !reflect.DeepEqual(blessEntry.Blessee, correct_blessee) {
t.Errorf("blessee incorrect: expected %v got %v", correct_blessee, blessEntry.Blessee)
}
if !reflect.DeepEqual(blessEntry.Blessed, correct_blessed) {
t.Errorf("blessed incorrect: expected %v got %v", correct_blessed, blessEntry.Blessed)
}
if blessEntry.RevocationCaveat != nil {
t.Errorf("caveat ID incorrect: expected %s got %s", cav.ID(), blessEntry.RevocationCaveat.ID())
}
}