github.com/chalford/terraform@v0.3.7-0.20150113080010-a78c69a8c81f/remote/atlas_test.go (about) 1 package remote 2 3 import ( 4 "bytes" 5 "crypto/md5" 6 "os" 7 "testing" 8 9 "github.com/hashicorp/terraform/terraform" 10 ) 11 12 func TestAtlasRemote_Interface(t *testing.T) { 13 var client interface{} = &AtlasRemoteClient{} 14 if _, ok := client.(RemoteClient); !ok { 15 t.Fatalf("does not implement interface") 16 } 17 } 18 19 func checkAtlas(t *testing.T) { 20 if os.Getenv("ATLAS_TOKEN") == "" { 21 t.SkipNow() 22 } 23 } 24 25 func TestAtlasRemote_Validate(t *testing.T) { 26 conf := map[string]string{} 27 if _, err := NewAtlasRemoteClient(conf); err == nil { 28 t.Fatalf("expect error") 29 } 30 31 conf["access_token"] = "test" 32 conf["name"] = "hashicorp/test-state" 33 if _, err := NewAtlasRemoteClient(conf); err != nil { 34 t.Fatalf("err: %v", err) 35 } 36 } 37 38 func TestAtlasRemote_Validate_envVar(t *testing.T) { 39 conf := map[string]string{} 40 if _, err := NewAtlasRemoteClient(conf); err == nil { 41 t.Fatalf("expect error") 42 } 43 44 defer os.Setenv("ATLAS_TOKEN", os.Getenv("ATLAS_TOKEN")) 45 os.Setenv("ATLAS_TOKEN", "foo") 46 47 conf["name"] = "hashicorp/test-state" 48 if _, err := NewAtlasRemoteClient(conf); err != nil { 49 t.Fatalf("err: %v", err) 50 } 51 } 52 53 func TestAtlasRemote(t *testing.T) { 54 checkAtlas(t) 55 remote := &terraform.RemoteState{ 56 Type: "atlas", 57 Config: map[string]string{ 58 "access_token": os.Getenv("ATLAS_TOKEN"), 59 "name": "hashicorp/test-remote-state", 60 }, 61 } 62 r, err := NewClientByState(remote) 63 if err != nil { 64 t.Fatalf("Err: %v", err) 65 } 66 67 // Get a valid input 68 inp, err := blankState(remote) 69 if err != nil { 70 t.Fatalf("Err: %v", err) 71 } 72 inpMD5 := md5.Sum(inp) 73 hash := inpMD5[:16] 74 75 // Delete the state, should be none 76 err = r.DeleteState() 77 if err != nil { 78 t.Fatalf("err: %v", err) 79 } 80 81 // Ensure no state 82 payload, err := r.GetState() 83 if err != nil { 84 t.Fatalf("Err: %v", err) 85 } 86 if payload != nil { 87 t.Fatalf("unexpected payload") 88 } 89 90 // Put the state 91 err = r.PutState(inp, false) 92 if err != nil { 93 t.Fatalf("err: %v", err) 94 } 95 96 // Get it back 97 payload, err = r.GetState() 98 if err != nil { 99 t.Fatalf("Err: %v", err) 100 } 101 if payload == nil { 102 t.Fatalf("unexpected payload") 103 } 104 105 // Check the payload 106 if !bytes.Equal(payload.MD5, hash) { 107 t.Fatalf("bad hash: %x %x", payload.MD5, hash) 108 } 109 if !bytes.Equal(payload.State, inp) { 110 t.Errorf("inp: %s", inp) 111 t.Fatalf("bad response: %s", payload.State) 112 } 113 114 // Delete the state 115 err = r.DeleteState() 116 if err != nil { 117 t.Fatalf("err: %v", err) 118 } 119 120 // Should be gone 121 payload, err = r.GetState() 122 if err != nil { 123 t.Fatalf("Err: %v", err) 124 } 125 if payload != nil { 126 t.Fatalf("unexpected payload") 127 } 128 }