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  }