blob: fe0f938590a563dd701c25df524bc491c4639b02 [file] [log] [blame]
package discharger
import (
"os"
"path/filepath"
"testing"
ssecurity "veyron/services/security"
"veyron2"
"veyron2/ipc"
"veyron2/naming"
"veyron2/rt"
"veyron2/security"
)
func revokerSetup(t *testing.T) (dischargerID security.PublicID, dischargerEndpoint, revokerEndpoint string, closeFunc func(), runtime veyron2.Runtime) {
var revokerDirPath = filepath.Join(os.TempDir(), "revoker_dir")
r := rt.Init()
// Create and start revoker and revocation discharge service
revokerServer, err := r.NewServer()
if err != nil {
t.Fatalf("rt.R().NewServer: %s", err)
}
revokerEP, err := revokerServer.Listen("tcp", "127.0.0.1:0")
if err != nil {
t.Fatalf("revokerServer.Listen failed: %v", err)
}
revokerService, err := NewRevoker(revokerDirPath)
if err != nil {
t.Fatalf("NewRevoker failed: $v", err)
}
revokerServiceStub := ssecurity.NewServerRevoker(revokerService)
err = revokerServer.Serve("", ipc.LeafDispatcher(revokerServiceStub, nil))
if err != nil {
t.Fatalf("revokerServer.Serve discharger: %s", err)
}
dischargerServer, err := rt.R().NewServer()
if err != nil {
t.Fatalf("rt.R().NewServer: %s", err)
}
dischargerEP, err := dischargerServer.Listen("tcp", "127.0.0.1:0")
if err != nil {
t.Fatalf("revokerServer.Listen failed: %v", err)
}
dischargerServiceStub := ssecurity.NewServerDischarger(NewDischarger(r.Identity()))
if err := dischargerServer.Serve("", ipc.LeafDispatcher(dischargerServiceStub, nil)); err != nil {
t.Fatalf("revokerServer.Serve revoker: %s", err)
}
return r.Identity().PublicID(),
naming.JoinAddressName(dischargerEP.String(), ""),
naming.JoinAddressName(revokerEP.String(), ""),
func() {
defer os.RemoveAll(revokerDirPath)
revokerServer.Stop()
dischargerServer.Stop()
},
r
}
func TestDischargeRevokeDischargeRevokeDischarge(t *testing.T) {
dcID, dc, rv, closeFunc, r := revokerSetup(t)
defer closeFunc()
revoker, err := ssecurity.BindRevoker(rv)
if err != nil {
t.Fatalf("error binding to server: ", err)
}
discharger, err := ssecurity.BindDischarger(dc)
if err != nil {
t.Fatalf("error binding to server: ", err)
}
preimage, cav, err := NewRevocationCaveat(dcID, dc)
if err != nil {
t.Fatalf("failed to create public key caveat: %s", err)
}
if _, err = discharger.Discharge(r.NewContext(), cav); err != nil {
t.Fatalf("failed to get discharge: %s", err)
}
if err = revoker.Revoke(r.NewContext(), preimage); err != nil {
t.Fatalf("failed to revoke: %s", err)
}
if discharge, err := discharger.Discharge(r.NewContext(), cav); err == nil || discharge != nil {
t.Fatalf("got a discharge for a revoked caveat: %s", err)
}
if err = revoker.Revoke(r.NewContext(), preimage); err != nil {
t.Fatalf("failed to revoke again: %s", err)
}
if discharge, err := discharger.Discharge(r.NewContext(), cav); err == nil || discharge != nil {
t.Fatalf("got a discharge for a doubly revoked caveat: %s", err)
}
}