github.com/terramate-io/tf@v0.0.0-20230830114523-fce866b4dfcd/backend/remote-state/inmem/backend_test.go (about) 1 // Copyright (c) HashiCorp, Inc. 2 // SPDX-License-Identifier: MPL-2.0 3 4 package inmem 5 6 import ( 7 "flag" 8 "os" 9 "testing" 10 11 "github.com/hashicorp/hcl/v2" 12 13 "github.com/terramate-io/tf/backend" 14 statespkg "github.com/terramate-io/tf/states" 15 "github.com/terramate-io/tf/states/remote" 16 17 _ "github.com/terramate-io/tf/logging" 18 ) 19 20 func TestMain(m *testing.M) { 21 flag.Parse() 22 os.Exit(m.Run()) 23 } 24 25 func TestBackend_impl(t *testing.T) { 26 var _ backend.Backend = new(Backend) 27 } 28 29 func TestBackendConfig(t *testing.T) { 30 defer Reset() 31 testID := "test_lock_id" 32 33 config := map[string]interface{}{ 34 "lock_id": testID, 35 } 36 37 b := backend.TestBackendConfig(t, New(), backend.TestWrapConfig(config)).(*Backend) 38 39 s, err := b.StateMgr(backend.DefaultStateName) 40 if err != nil { 41 t.Fatal(err) 42 } 43 44 c := s.(*remote.State).Client.(*RemoteClient) 45 if c.Name != backend.DefaultStateName { 46 t.Fatal("client name is not configured") 47 } 48 49 if err := locks.unlock(backend.DefaultStateName, testID); err != nil { 50 t.Fatalf("default state should have been locked: %s", err) 51 } 52 } 53 54 func TestBackend(t *testing.T) { 55 defer Reset() 56 b := backend.TestBackendConfig(t, New(), hcl.EmptyBody()).(*Backend) 57 backend.TestBackendStates(t, b) 58 } 59 60 func TestBackendLocked(t *testing.T) { 61 defer Reset() 62 b1 := backend.TestBackendConfig(t, New(), hcl.EmptyBody()).(*Backend) 63 b2 := backend.TestBackendConfig(t, New(), hcl.EmptyBody()).(*Backend) 64 65 backend.TestBackendStateLocks(t, b1, b2) 66 } 67 68 // use the this backen to test the remote.State implementation 69 func TestRemoteState(t *testing.T) { 70 defer Reset() 71 b := backend.TestBackendConfig(t, New(), hcl.EmptyBody()) 72 73 workspace := "workspace" 74 75 // create a new workspace in this backend 76 s, err := b.StateMgr(workspace) 77 if err != nil { 78 t.Fatal(err) 79 } 80 81 // force overwriting the remote state 82 newState := statespkg.NewState() 83 84 if err := s.WriteState(newState); err != nil { 85 t.Fatal(err) 86 } 87 88 if err := s.PersistState(nil); err != nil { 89 t.Fatal(err) 90 } 91 92 if err := s.RefreshState(); err != nil { 93 t.Fatal(err) 94 } 95 }