func TestStatus(t *testing.T) { ui := new(cli.MockUi) c := &StatusCommand{ Meta: Meta{ Ui: ui, }, } core := vault.TestCore(t) key, _ := vault.TestCoreInit(t, core) ln, addr := http.TestServer(t, core) defer ln.Close() args := []string{"-address", addr} if code := c.Run(args); code != 1 { t.Fatalf("bad: %d\n\n%s", code, ui.ErrorWriter.String()) } if _, err := core.Unseal(key); err != nil { t.Fatalf("err: %s", err) } if code := c.Run(args); code != 0 { t.Fatalf("bad: %d\n\n%s", code, ui.ErrorWriter.String()) } }
func TestUnseal_arg(t *testing.T) { core := vault.TestCore(t) key, _ := vault.TestCoreInit(t, core) ln, addr := http.TestServer(t, core) defer ln.Close() ui := new(cli.MockUi) c := &UnsealCommand{ Meta: Meta{ Ui: ui, }, } args := []string{"-address", addr, hex.EncodeToString(key)} if code := c.Run(args); code != 0 { t.Fatalf("bad: %d\n\n%s", code, ui.ErrorWriter.String()) } sealed, err := core.Sealed() if err != nil { t.Fatalf("err: %s", err) } if sealed { t.Fatal("should not be sealed") } }
func TestSysUnseal_badKey(t *testing.T) { core := vault.TestCore(t) vault.TestCoreInit(t, core) ln, addr := TestServer(t, core) defer ln.Close() resp := testHttpPut(t, "", addr+"/v1/sys/unseal", map[string]interface{}{ "key": "0123", }) testResponseStatus(t, resp, 400) }
func TestSysInit_get(t *testing.T) { core := vault.TestCore(t) ln, addr := TestServer(t, core) defer ln.Close() { // Pre-init resp, err := http.Get(addr + "/v1/sys/init") if err != nil { t.Fatalf("err: %s", err) } var actual map[string]interface{} expected := map[string]interface{}{ "initialized": false, } testResponseStatus(t, resp, 200) testResponseBody(t, resp, &actual) if !reflect.DeepEqual(actual, expected) { t.Fatalf("bad: %#v", actual) } } vault.TestCoreInit(t, core) { // Post-init resp, err := http.Get(addr + "/v1/sys/init") if err != nil { t.Fatalf("err: %s", err) } var actual map[string]interface{} expected := map[string]interface{}{ "initialized": true, } testResponseStatus(t, resp, 200) testResponseBody(t, resp, &actual) if !reflect.DeepEqual(actual, expected) { t.Fatalf("bad: %#v", actual) } } }
func TestSysSealStatus(t *testing.T) { core := vault.TestCore(t) vault.TestCoreInit(t, core) ln, addr := TestServer(t, core) defer ln.Close() resp, err := http.Get(addr + "/v1/sys/seal-status") if err != nil { t.Fatalf("err: %s", err) } var actual map[string]interface{} expected := map[string]interface{}{ "sealed": true, "t": json.Number("1"), "n": json.Number("1"), "progress": json.Number("0"), } testResponseStatus(t, resp, 200) testResponseBody(t, resp, &actual) if actual["version"] == nil { t.Fatalf("expected version information") } expected["version"] = actual["version"] if actual["cluster_name"] == nil { delete(expected, "cluster_name") } else { expected["cluster_name"] = actual["cluster_name"] } if actual["cluster_id"] == nil { delete(expected, "cluster_id") } else { expected["cluster_id"] = actual["cluster_id"] } if !reflect.DeepEqual(actual, expected) { t.Fatalf("bad: expected: %#v\nactual: %#v", expected, actual) } }
func TestSysUnseal(t *testing.T) { core := vault.TestCore(t) key, _ := vault.TestCoreInit(t, core) ln, addr := TestServer(t, core) defer ln.Close() resp := testHttpPut(t, "", addr+"/v1/sys/unseal", map[string]interface{}{ "key": hex.EncodeToString(key), }) var actual map[string]interface{} expected := map[string]interface{}{ "sealed": false, "t": float64(1), "n": float64(1), "progress": float64(0), } testResponseStatus(t, resp, 200) testResponseBody(t, resp, &actual) if !reflect.DeepEqual(actual, expected) { t.Fatalf("bad: %#v", actual) } }
func TestSysUnseal(t *testing.T) { core := vault.TestCore(t) key, _ := vault.TestCoreInit(t, core) ln, addr := TestServer(t, core) defer ln.Close() resp := testHttpPut(t, "", addr+"/v1/sys/unseal", map[string]interface{}{ "key": hex.EncodeToString(key), }) var actual map[string]interface{} expected := map[string]interface{}{ "sealed": false, "t": json.Number("1"), "n": json.Number("1"), "progress": json.Number("0"), } testResponseStatus(t, resp, 200) testResponseBody(t, resp, &actual) if actual["version"] == nil { t.Fatalf("expected version information") } expected["version"] = actual["version"] if actual["cluster_name"] == nil { delete(expected, "cluster_name") } else { expected["cluster_name"] = actual["cluster_name"] } if actual["cluster_id"] == nil { delete(expected, "cluster_id") } else { expected["cluster_id"] = actual["cluster_id"] } if !reflect.DeepEqual(actual, expected) { t.Fatalf("bad: expected: %#v\nactual: %#v", expected, actual) } }
func TestSysSealStatus(t *testing.T) { core := vault.TestCore(t) vault.TestCoreInit(t, core) ln, addr := TestServer(t, core) defer ln.Close() resp, err := http.Get(addr + "/v1/sys/seal-status") if err != nil { t.Fatalf("err: %s", err) } var actual map[string]interface{} expected := map[string]interface{}{ "sealed": true, "t": float64(1), "n": float64(1), "progress": float64(0), } testResponseStatus(t, resp, 200) testResponseBody(t, resp, &actual) if !reflect.DeepEqual(actual, expected) { t.Fatalf("bad: %#v", actual) } }
func TestLogical_StandbyRedirect(t *testing.T) { ln1, addr1 := TestListener(t) defer ln1.Close() ln2, addr2 := TestListener(t) defer ln2.Close() // Create an HA Vault inmha := physical.NewInmemHA(logger) conf := &vault.CoreConfig{ Physical: inmha, HAPhysical: inmha, RedirectAddr: addr1, DisableMlock: true, } core1, err := vault.NewCore(conf) if err != nil { t.Fatalf("err: %v", err) } key, root := vault.TestCoreInit(t, core1) if _, err := core1.Unseal(vault.TestKeyCopy(key)); err != nil { t.Fatalf("unseal err: %s", err) } // Attempt to fix raciness in this test by giving the first core a chance // to grab the lock time.Sleep(time.Second) // Create a second HA Vault conf2 := &vault.CoreConfig{ Physical: inmha, HAPhysical: inmha, RedirectAddr: addr2, DisableMlock: true, } core2, err := vault.NewCore(conf2) if err != nil { t.Fatalf("err: %v", err) } if _, err := core2.Unseal(vault.TestKeyCopy(key)); err != nil { t.Fatalf("unseal err: %s", err) } TestServerWithListener(t, ln1, addr1, core1) TestServerWithListener(t, ln2, addr2, core2) TestServerAuth(t, addr1, root) // WRITE to STANDBY resp := testHttpPut(t, root, addr2+"/v1/secret/foo", map[string]interface{}{ "data": "bar", }) testResponseStatus(t, resp, 307) //// READ to standby resp = testHttpGet(t, root, addr2+"/v1/auth/token/lookup-self") var actual map[string]interface{} var nilWarnings interface{} expected := map[string]interface{}{ "renewable": false, "lease_duration": json.Number("0"), "data": map[string]interface{}{ "meta": nil, "num_uses": json.Number("0"), "path": "auth/token/root", "policies": []interface{}{"root"}, "display_name": "root", "orphan": true, "id": root, "ttl": json.Number("0"), "creation_ttl": json.Number("0"), "explicit_max_ttl": json.Number("0"), }, "warnings": nilWarnings, "wrap_info": nil, "auth": nil, } testResponseStatus(t, resp, 200) testResponseBody(t, resp, &actual) actualDataMap := actual["data"].(map[string]interface{}) delete(actualDataMap, "creation_time") delete(actualDataMap, "accessor") actual["data"] = actualDataMap expected["request_id"] = actual["request_id"] delete(actual, "lease_id") if !reflect.DeepEqual(actual, expected) { t.Fatalf("bad: got %#v; expected %#v", actual, expected) } //// DELETE to standby resp = testHttpDelete(t, root, addr2+"/v1/secret/foo") testResponseStatus(t, resp, 307) }
func TestLogical_StandbyRedirect(t *testing.T) { ln1, addr1 := TestListener(t) defer ln1.Close() ln2, addr2 := TestListener(t) defer ln2.Close() // Create an HA Vault inm := physical.NewInmemHA() conf := &vault.CoreConfig{ Physical: inm, AdvertiseAddr: addr1, DisableMlock: true, } core1, err := vault.NewCore(conf) if err != nil { t.Fatalf("err: %v", err) } key, root := vault.TestCoreInit(t, core1) if _, err := core1.Unseal(vault.TestKeyCopy(key)); err != nil { t.Fatalf("unseal err: %s", err) } // Create a second HA Vault conf2 := &vault.CoreConfig{ Physical: inm, AdvertiseAddr: addr2, DisableMlock: true, } core2, err := vault.NewCore(conf2) if err != nil { t.Fatalf("err: %v", err) } if _, err := core2.Unseal(vault.TestKeyCopy(key)); err != nil { t.Fatalf("unseal err: %s", err) } TestServerWithListener(t, ln1, addr1, core1) TestServerWithListener(t, ln2, addr2, core2) TestServerAuth(t, addr1, root) // WRITE to STANDBY resp := testHttpPut(t, addr2+"/v1/secret/foo", map[string]interface{}{ "data": "bar", }) testResponseStatus(t, resp, 307) //// READ to standby resp, err = http.Get(addr2 + "/v1/auth/token/lookup-self") if err != nil { t.Fatalf("err: %s", err) } var actual map[string]interface{} expected := map[string]interface{}{ "renewable": false, "lease_duration": float64(0), "data": map[string]interface{}{ "meta": nil, "num_uses": float64(0), "path": "auth/token/root", "policies": []interface{}{"root"}, "display_name": "root", "id": root, }, "auth": nil, } testResponseStatus(t, resp, 200) testResponseBody(t, resp, &actual) delete(actual, "lease_id") if !reflect.DeepEqual(actual, expected) { t.Fatalf("bad: %#v %#v", actual, expected) } //// DELETE to standby resp = testHttpDelete(t, addr2+"/v1/secret/foo") testResponseStatus(t, resp, 307) }
func TestSysHealth_get(t *testing.T) { core := vault.TestCore(t) ln, addr := TestServer(t, core) defer ln.Close() resp, err := http.Get(addr + "/v1/sys/health") if err != nil { t.Fatalf("err: %s", err) } var actual map[string]interface{} expected := map[string]interface{}{ "initialized": false, "sealed": true, "standby": true, } testResponseStatus(t, resp, 501) testResponseBody(t, resp, &actual) expected["server_time_utc"] = actual["server_time_utc"] expected["version"] = actual["version"] if actual["cluster_name"] == nil { delete(expected, "cluster_name") } else { expected["cluster_name"] = actual["cluster_name"] } if actual["cluster_id"] == nil { delete(expected, "cluster_id") } else { expected["cluster_id"] = actual["cluster_id"] } if !reflect.DeepEqual(actual, expected) { t.Fatalf("bad: expected:%#v\nactual:%#v", expected, actual) } key, _ := vault.TestCoreInit(t, core) resp, err = http.Get(addr + "/v1/sys/health") if err != nil { t.Fatalf("err: %s", err) } actual = map[string]interface{}{} expected = map[string]interface{}{ "initialized": true, "sealed": true, "standby": true, } testResponseStatus(t, resp, 503) testResponseBody(t, resp, &actual) expected["server_time_utc"] = actual["server_time_utc"] expected["version"] = actual["version"] if actual["cluster_name"] == nil { delete(expected, "cluster_name") } else { expected["cluster_name"] = actual["cluster_name"] } if actual["cluster_id"] == nil { delete(expected, "cluster_id") } else { expected["cluster_id"] = actual["cluster_id"] } if !reflect.DeepEqual(actual, expected) { t.Fatalf("bad: expected:%#v\nactual:%#v", expected, actual) } if _, err := vault.TestCoreUnseal(core, vault.TestKeyCopy(key)); err != nil { t.Fatalf("unseal err: %s", err) } resp, err = http.Get(addr + "/v1/sys/health") if err != nil { t.Fatalf("err: %s", err) } actual = map[string]interface{}{} expected = map[string]interface{}{ "initialized": true, "sealed": false, "standby": false, } testResponseStatus(t, resp, 200) testResponseBody(t, resp, &actual) expected["server_time_utc"] = actual["server_time_utc"] expected["version"] = actual["version"] if actual["cluster_name"] == nil { delete(expected, "cluster_name") } else { expected["cluster_name"] = actual["cluster_name"] } if actual["cluster_id"] == nil { delete(expected, "cluster_id") } else { expected["cluster_id"] = actual["cluster_id"] } if !reflect.DeepEqual(actual, expected) { t.Fatalf("bad: expected:%#v\nactual:%#v", expected, actual) } }