func TestSeekRead(t *testing.T) { if testing.Short() { t.Skip("Skipped because of short mode") } testFuse(t, func(c client.APIClient, mountpoint string) { repo := "test" require.NoError(t, c.CreateRepo(repo)) commit, err := c.StartCommit(repo, "", "") require.NoError(t, err) path := filepath.Join(mountpoint, repo, commit.ID, "file") file, err := os.Create(path) require.NoError(t, err) _, err = file.Write([]byte("foobarbaz")) require.NoError(t, err) require.NoError(t, file.Close()) require.NoError(t, c.FinishCommit(repo, commit.ID)) fmt.Printf("==== Finished commit\n") file, err = os.Open(path) defer file.Close() require.NoError(t, err) word1 := make([]byte, 3) n1, err := file.Read(word1) require.NoError(t, err) require.Equal(t, 3, n1) require.Equal(t, "foo", string(word1)) fmt.Printf("==== %v - Read word len %v : %v\n", time.Now(), n1, string(word1)) offset, err := file.Seek(6, 0) fmt.Printf("==== %v - err (%v)\n", time.Now(), err) fmt.Printf("==== %v - offset (%v)\n", time.Now(), offset) require.YesError(t, err) require.Equal(t, int64(0), offset) fmt.Printf("==== Seeked to %v\n", offset) /* Leaving in place so the test's intention is clear / for repro'ing manually for mac word2 := make([]byte, 3) n2, err := file.Read(word2) require.NoError(t, err) require.Equal(t, 3, n2) require.Equal(t, "baz", string(word2)) fmt.Printf("==== Read word len %v : %v\n", n2, string(word2)) */ }) }
func TestJSONSyntaxErrorsReportedCreatePipelineFromStdin(t *testing.T) { descriptiveOutput := `Reading from stdin. Error parsing pipeline spec: Syntax Error on line 5: "c": {a ^ invalid character 'a' looking for beginning of object key string ` rawCmd := []string{"pachctl", "create-pipeline"} testName := "TestJSONSyntaxErrorsReportedCreatePipelineFromStdin" if os.Getenv("BE_CRASHER") == "1" { address := "0.0.0.0:30650" rootCmd := &cobra.Command{ Use: os.Args[0], Long: `Access the Pachyderm API. Envronment variables: ADDRESS=0.0.0.0:30650, the server to connect to. `, } cmds, _ := Cmds(address) for _, cmd := range cmds { rootCmd.AddCommand(cmd) } os.Args = rawCmd ioutil.WriteFile("bad2.json", []byte(badJSON2), 0644) os.Stdin, _ = os.Open("bad2.json") rootCmd.Execute() return } cmd := exec.Command(os.Args[0], fmt.Sprintf("-test.run=%v", testName)) cmd.Env = append(os.Environ(), "BE_CRASHER=1") out, err := cmd.CombinedOutput() // Put our cleanup here, since we have an exit 1 in the actual run: wd, _ := os.Getwd() os.Remove(filepath.Join(wd, "bad2.json")) require.YesError(t, err) if e, ok := err.(*exec.ExitError); ok && !e.Success() { require.Equal(t, descriptiveOutput, string(out)) return } t.Fatalf("process ran with err %v, want exit status 1", err) }
func TestSeekWriteBackwards(t *testing.T) { if testing.Short() { t.Skip("Skipped because of short mode") } testFuse(t, func(c client.APIClient, mountpoint string) { repo := "test" require.NoError(t, c.CreateRepo(repo)) commit, err := c.StartCommit(repo, "", "") require.NoError(t, err) path := filepath.Join(mountpoint, repo, commit.ID, "file") file, err := os.Create(path) require.NoError(t, err) defer func() { // MAC OS X BEHAVIOR - it allows seek but this is an invalid write require.YesError(t, file.Close()) }() _, err = file.Write([]byte("foofoofoo")) require.NoError(t, err) err = file.Sync() require.NoError(t, err) offset, err := file.Seek(3, 0) fmt.Printf("==== %v - err (%v)\n", time.Now(), err) fmt.Printf("==== %v - offset (%v)\n", time.Now(), offset) // MAC OS X BEHAVIOR - it allows seek require.NoError(t, err) require.Equal(t, int64(3), offset) /* Leaving in place so the test's intention is clear / for repro'ing manually for mac */ err = file.Sync() require.NoError(t, err) n1, err := file.Write([]byte("bar")) // MAC OS X BEHAVIOR - it allows seek require.NoError(t, err) require.Equal(t, 3, n1) fmt.Printf("==== %v - write word len %v\n", time.Now(), n1) require.NoError(t, c.FinishCommit(repo, commit.ID)) }) }
func TestSeekWriteGap(t *testing.T) { if testing.Short() { t.Skip("Skipped because of short mode") } testFuse(t, func(c client.APIClient, mountpoint string) { repo := "test" require.NoError(t, c.CreateRepo(repo)) commit, err := c.StartCommit(repo, "", "") require.NoError(t, err) path := filepath.Join(mountpoint, repo, commit.ID, "file") file, err := os.Create(path) require.NoError(t, err) defer func() { require.NoError(t, file.Close()) }() _, err = file.Write([]byte("foo")) require.NoError(t, err) err = file.Sync() require.NoError(t, err) offset, err := file.Seek(6, 0) fmt.Printf("==== %v - err (%v)\n", time.Now(), err) fmt.Printf("==== %v - offset (%v)\n", time.Now(), offset) require.YesError(t, err) require.Equal(t, int64(0), offset) /* Leaving in place so the test's intention is clear / for repro'ing manually for mac err = file.Sync() require.NoError(t, err) n1, err := file.Write([]byte("baz")) require.YesError(t, err) require.Equal(t, 3, n1) require.NoError(t, c.FinishCommit(repo, commit.ID)) */ }) }
func testBadJSON(t *testing.T, testName string, inputFile string, inputFileValue string, inputCommand []string, expectedOutput string) { if os.Getenv("BE_CRASHER") == "1" { testJSONSyntaxErrorsReported(inputFile, inputFileValue, inputCommand) return } cmd := exec.Command(os.Args[0], fmt.Sprintf("-test.run=%v", testName)) cmd.Env = append(os.Environ(), "BE_CRASHER=1") out, err := cmd.CombinedOutput() // Do our cleanup here, since we have an exit 1 in the actual run: wd, _ := os.Getwd() fileName := filepath.Join(wd, inputFile) os.Remove(fileName) require.YesError(t, err) if e, ok := err.(*exec.ExitError); ok && !e.Success() { require.Equal(t, expectedOutput, string(out)) return } t.Fatalf("process ran with err %v, want exit status 1", err) }