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  }