func testSignedManifest(t *testing.T, modify func(pods.ManifestBuilder, *openpgp.Entity)) (pods.Manifest, *openpgp.Entity) { testManifest := testManifest(t) if fakeSigner == nil { var err error fakeSigner, err = openpgp.ReadEntity(packet.NewReader(bytes.NewReader(fakeEntity))) Assert(t).IsNil(err, "should have read entity") } if modify != nil { testManifestBuilder := testManifest.GetBuilder() modify(testManifestBuilder, fakeSigner) testManifest = testManifestBuilder.GetManifest() } manifestBytes, err := testManifest.Marshal() Assert(t).IsNil(err, "manifest bytes error should have been nil") var buf bytes.Buffer sigWriter, err := clearsign.Encode(&buf, fakeSigner.PrivateKey, nil) Assert(t).IsNil(err, "clearsign Encode error should have been nil") sigWriter.Write(manifestBytes) sigWriter.Close() manifest, err := pods.ManifestFromBytes(buf.Bytes()) Assert(t).IsNil(err, "should have generated manifest from signed bytes") return manifest, fakeSigner }
func TestHookPodsInstallAndLinkCorrectly(t *testing.T) { hookPrefix := "hooks" destDir, _ := ioutil.TempDir("", "pods") defer os.RemoveAll(destDir) execDir, err := ioutil.TempDir("", "exec") defer os.RemoveAll(execDir) Assert(t).IsNil(err, "should not have erred creating a tempdir") current, err := user.Current() Assert(t).IsNil(err, "test setup: could not get the current user") builder := pods.NewManifestBuilder() builder.SetID("users") builder.SetRunAsUser(current.Username) builder.SetLaunchables(map[string]pods.LaunchableStanza{ "create": { Location: util.From(runtime.Caller(0)).ExpandPath("hoisted-hello_def456.tar.gz"), LaunchableType: "hoist", LaunchableId: "create", }, }) manifest := builder.GetManifest() manifestBytes, err := manifest.Marshal() Assert(t).IsNil(err, "manifest bytes error should have been nil") fakeSigner, err := openpgp.NewEntity("p2", "p2-test", "*****@*****.**", nil) Assert(t).IsNil(err, "NewEntity error should have been nil") var buf bytes.Buffer sigWriter, err := clearsign.Encode(&buf, fakeSigner.PrivateKey, nil) Assert(t).IsNil(err, "clearsign encode error should have been nil") sigWriter.Write(manifestBytes) sigWriter.Close() manifest, err = pods.ManifestFromBytes(buf.Bytes()) Assert(t).IsNil(err, "should have generated manifest from signed bytes") fakeIntent := fakeStoreWithManifests(kp.ManifestResult{ Path: path.Join(hookPrefix, "users"), Manifest: manifest, }) listener := HookListener{ Intent: fakeIntent, HookPrefix: hookPrefix, ExecDir: execDir, DestinationDir: destDir, Logger: logging.DefaultLogger, authPolicy: auth.FixedKeyringPolicy{openpgp.EntityList{fakeSigner}, nil}, } errCh := make(chan error, 1) listener.Sync(fakeIntent.quit, errCh) select { case err := <-errCh: Assert(t).IsNil(err, "There should not have been an error in the call to sync") default: } currentAlias := path.Join(destDir, "users", "create", "current", "bin", "launch") _, err = os.Stat(currentAlias) Assert(t).IsNil(err, fmt.Sprintf("%s should have been created", currentAlias)) hookFile := path.Join(execDir, "users__create__launch") _, err = os.Stat(hookFile) Assert(t).IsNil(err, "should have created the user launch script") }