func TestList(t *testing.T) { resetFlags() fake, cleanup := jiritest.NewFakeJiriRoot(t) defer cleanup() snapshotDir1 := "" // Should use default dir. snapshotDir2 := filepath.Join(fake.X.Root, "some/other/dir") // Create a test suite. tests := []config{ config{ dir: snapshotDir1, }, config{ dir: snapshotDir2, }, } labels := []label{ label{ name: "beta", snapshots: []string{"beta-1", "beta-2", "beta-3"}, }, label{ name: "stable", snapshots: []string{"stable-1", "stable-2", "stable-3"}, }, } for _, test := range tests { snapshotDirFlag = test.dir // Create the snapshots directory and populate it with the // data specified by the test suite. for _, label := range labels { createLabelDir(t, fake.X, test.dir, label.name, label.snapshots) } // Check that running "jiri snapshot list" with no arguments // returns the expected output. var stdout bytes.Buffer fake.X.Context = tool.NewContext(tool.ContextOpts{Stdout: &stdout}) if err := runSnapshotList(fake.X, nil); err != nil { t.Fatalf("%v", err) } got, want := stdout.String(), generateOutput(labels) if got != want { t.Fatalf("unexpected output:\ngot\n%v\nwant\n%v\n", got, want) } // Check that running "jiri snapshot list" with one argument // returns the expected output. stdout.Reset() if err := runSnapshotList(fake.X, []string{"stable"}); err != nil { t.Fatalf("%v", err) } got, want = stdout.String(), generateOutput(labels[1:]) if got != want { t.Fatalf("unexpected output:\ngot\n%v\nwant\n%v\n", got, want) } // Check that running "jiri snapshot list" with // multiple arguments returns the expected output. stdout.Reset() if err := runSnapshotList(fake.X, []string{"beta", "stable"}); err != nil { t.Fatalf("%v", err) } got, want = stdout.String(), generateOutput(labels) if got != want { t.Fatalf("unexpected output:\ngot\n%v\nwant\n%v\n", got, want) } } }
// TestCreate tests creating and checking out a snapshot. func TestCreate(t *testing.T) { resetFlags() defer resetFlags() fake, cleanup := jiritest.NewFakeJiriRoot(t) defer cleanup() s := fake.X.NewSeq() // Setup the initial remote and local projects. numProjects, remoteProjects := 2, []string{} for i := 0; i < numProjects; i++ { if err := fake.CreateRemoteProject(remoteProjectName(i)); err != nil { t.Fatalf("%v", err) } if err := fake.AddProject(project.Project{ Name: remoteProjectName(i), Path: localProjectName(i), Remote: fake.Projects[remoteProjectName(i)], }); err != nil { t.Fatalf("%v", err) } } // Create initial commits in the remote projects and use UpdateUniverse() // to mirror them locally. for i := 0; i < numProjects; i++ { writeReadme(t, fake.X, fake.Projects[remoteProjectName(i)], "revision 1") } if err := project.UpdateUniverse(fake.X, true); err != nil { t.Fatalf("%v", err) } // Create a snapshot. var stdout bytes.Buffer fake.X.Context = tool.NewContext(tool.ContextOpts{Stdout: &stdout}) if err := runSnapshotCreate(fake.X, []string{"test-local"}); err != nil { t.Fatalf("%v", err) } // Remove the local project repositories. for i, _ := range remoteProjects { localProject := filepath.Join(fake.X.Root, localProjectName(i)) if err := s.RemoveAll(localProject).Done(); err != nil { t.Fatalf("%v", err) } } // Check that invoking the UpdateUniverse() with the snapshot restores the // local repositories. snapshotDir := filepath.Join(fake.X.Root, defaultSnapshotDir) snapshotFile := filepath.Join(snapshotDir, "test-local") localX := fake.X.Clone(tool.ContextOpts{ Manifest: &snapshotFile, }) if err := project.UpdateUniverse(localX, true); err != nil { t.Fatalf("%v", err) } for i, _ := range remoteProjects { localProject := filepath.Join(fake.X.Root, localProjectName(i)) checkReadme(t, fake.X, localProject, "revision 1") } }