1package file 2 3import ( 4 "fmt" 5 "io/ioutil" 6 "os" 7 "path/filepath" 8 "testing" 9 10 hclog "github.com/hashicorp/go-hclog" 11 uuid "github.com/hashicorp/go-uuid" 12 "github.com/hashicorp/vault/command/agent/sink" 13 "github.com/hashicorp/vault/sdk/helper/logging" 14) 15 16const ( 17 fileServerTestDir = "vault-agent-file-test" 18) 19 20func testFileSink(t *testing.T, log hclog.Logger) (*sink.SinkConfig, string) { 21 tmpDir, err := ioutil.TempDir("", fmt.Sprintf("%s.", fileServerTestDir)) 22 if err != nil { 23 t.Fatal(err) 24 } 25 26 path := filepath.Join(tmpDir, "token") 27 28 config := &sink.SinkConfig{ 29 Logger: log.Named("sink.file"), 30 Config: map[string]interface{}{ 31 "path": path, 32 }, 33 } 34 35 s, err := NewFileSink(config) 36 if err != nil { 37 t.Fatal(err) 38 } 39 config.Sink = s 40 41 return config, tmpDir 42} 43 44func TestFileSink(t *testing.T) { 45 log := logging.NewVaultLogger(hclog.Trace) 46 47 fs, tmpDir := testFileSink(t, log) 48 defer os.RemoveAll(tmpDir) 49 50 path := filepath.Join(tmpDir, "token") 51 52 uuidStr, _ := uuid.GenerateUUID() 53 if err := fs.WriteToken(uuidStr); err != nil { 54 t.Fatal(err) 55 } 56 57 file, err := os.Open(path) 58 if err != nil { 59 t.Fatal(err) 60 } 61 62 fi, err := file.Stat() 63 if err != nil { 64 t.Fatal(err) 65 } 66 if fi.Mode() != os.FileMode(0640) { 67 t.Fatalf("wrong file mode was detected at %s", path) 68 } 69 err = file.Close() 70 if err != nil { 71 t.Fatal(err) 72 } 73 74 fileBytes, err := ioutil.ReadFile(path) 75 if err != nil { 76 t.Fatal(err) 77 } 78 79 if string(fileBytes) != uuidStr { 80 t.Fatalf("expected %s, got %s", uuidStr, string(fileBytes)) 81 } 82} 83 84func testFileSinkMode(t *testing.T, log hclog.Logger) (*sink.SinkConfig, string) { 85 tmpDir, err := ioutil.TempDir("", fmt.Sprintf("%s.", fileServerTestDir)) 86 if err != nil { 87 t.Fatal(err) 88 } 89 90 path := filepath.Join(tmpDir, "token") 91 92 config := &sink.SinkConfig{ 93 Logger: log.Named("sink.file"), 94 Config: map[string]interface{}{ 95 "path": path, 96 "mode": 0644, 97 }, 98 } 99 100 s, err := NewFileSink(config) 101 if err != nil { 102 t.Fatal(err) 103 } 104 config.Sink = s 105 106 return config, tmpDir 107} 108 109func TestFileSinkMode(t *testing.T) { 110 log := logging.NewVaultLogger(hclog.Trace) 111 112 fs, tmpDir := testFileSinkMode(t, log) 113 defer os.RemoveAll(tmpDir) 114 115 path := filepath.Join(tmpDir, "token") 116 117 uuidStr, _ := uuid.GenerateUUID() 118 if err := fs.WriteToken(uuidStr); err != nil { 119 t.Fatal(err) 120 } 121 122 file, err := os.Open(path) 123 if err != nil { 124 t.Fatal(err) 125 } 126 defer file.Close() 127 128 fi, err := file.Stat() 129 if err != nil { 130 t.Fatal(err) 131 } 132 if fi.Mode() != os.FileMode(0644) { 133 t.Fatalf("wrong file mode was detected at %s", path) 134 } 135 136 fileBytes, err := ioutil.ReadFile(path) 137 if err != nil { 138 t.Fatal(err) 139 } 140 141 if string(fileBytes) != uuidStr { 142 t.Fatalf("expected %s, got %s", uuidStr, string(fileBytes)) 143 } 144} 145