github.com/doitroot/helm@v3.0.0-beta.3+incompatible/pkg/storage/driver/memory_test.go (about)

     1  /*
     2  Copyright The Helm Authors.
     3  
     4  Licensed under the Apache License, Version 2.0 (the "License");
     5  you may not use this file except in compliance with the License.
     6  You may obtain a copy of the License at
     7  
     8      http://www.apache.org/licenses/LICENSE-2.0
     9  
    10  Unless required by applicable law or agreed to in writing, software
    11  distributed under the License is distributed on an "AS IS" BASIS,
    12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13  See the License for the specific language governing permissions and
    14  limitations under the License.
    15  */
    16  
    17  package driver
    18  
    19  import (
    20  	"fmt"
    21  	"reflect"
    22  	"testing"
    23  
    24  	rspb "helm.sh/helm/pkg/release"
    25  )
    26  
    27  func TestMemoryName(t *testing.T) {
    28  	if mem := NewMemory(); mem.Name() != MemoryDriverName {
    29  		t.Errorf("Expected name to be %q, got %q", MemoryDriverName, mem.Name())
    30  	}
    31  }
    32  
    33  func TestMemoryCreate(t *testing.T) {
    34  	var tests = []struct {
    35  		desc string
    36  		rls  *rspb.Release
    37  		err  bool
    38  	}{
    39  		{
    40  			"create should success",
    41  			releaseStub("rls-c", 1, "default", rspb.StatusDeployed),
    42  			false,
    43  		},
    44  		{
    45  			"create should fail (release already exists)",
    46  			releaseStub("rls-a", 1, "default", rspb.StatusDeployed),
    47  			true,
    48  		},
    49  	}
    50  
    51  	ts := tsFixtureMemory(t)
    52  	for _, tt := range tests {
    53  		key := testKey(tt.rls.Name, tt.rls.Version)
    54  		rls := tt.rls
    55  
    56  		if err := ts.Create(key, rls); err != nil {
    57  			if !tt.err {
    58  				t.Fatalf("failed to create %q: %s", tt.desc, err)
    59  			}
    60  		}
    61  	}
    62  }
    63  
    64  func TestMemoryGet(t *testing.T) {
    65  	var tests = []struct {
    66  		desc string
    67  		key  string
    68  		err  bool
    69  	}{
    70  		{"release key should exist", "rls-a.v1", false},
    71  		{"release key should not exist", "rls-a.v5", true},
    72  	}
    73  
    74  	ts := tsFixtureMemory(t)
    75  	for _, tt := range tests {
    76  		if _, err := ts.Get(tt.key); err != nil {
    77  			if !tt.err {
    78  				t.Fatalf("Failed %q to get '%s': %q\n", tt.desc, tt.key, err)
    79  			}
    80  		}
    81  	}
    82  }
    83  
    84  func TestMemoryQuery(t *testing.T) {
    85  	var tests = []struct {
    86  		desc string
    87  		xlen int
    88  		lbs  map[string]string
    89  	}{
    90  		{
    91  			"should be 2 query results",
    92  			2,
    93  			map[string]string{"status": "deployed"},
    94  		},
    95  	}
    96  
    97  	ts := tsFixtureMemory(t)
    98  	for _, tt := range tests {
    99  		l, err := ts.Query(tt.lbs)
   100  		if err != nil {
   101  			t.Fatalf("Failed to query: %s\n", err)
   102  		}
   103  
   104  		if tt.xlen != len(l) {
   105  			t.Fatalf("Expected %d results, actual %d\n", tt.xlen, len(l))
   106  		}
   107  	}
   108  }
   109  
   110  func TestMemoryUpdate(t *testing.T) {
   111  	var tests = []struct {
   112  		desc string
   113  		key  string
   114  		rls  *rspb.Release
   115  		err  bool
   116  	}{
   117  		{
   118  			"update release status",
   119  			"rls-a.v4",
   120  			releaseStub("rls-a", 4, "default", rspb.StatusSuperseded),
   121  			false,
   122  		},
   123  		{
   124  			"update release does not exist",
   125  			"rls-z.v1",
   126  			releaseStub("rls-z", 1, "default", rspb.StatusUninstalled),
   127  			true,
   128  		},
   129  	}
   130  
   131  	ts := tsFixtureMemory(t)
   132  	for _, tt := range tests {
   133  		if err := ts.Update(tt.key, tt.rls); err != nil {
   134  			if !tt.err {
   135  				t.Fatalf("Failed %q: %s\n", tt.desc, err)
   136  			}
   137  			continue
   138  		}
   139  
   140  		r, err := ts.Get(tt.key)
   141  		if err != nil {
   142  			t.Fatalf("Failed to get: %s\n", err)
   143  		}
   144  
   145  		if !reflect.DeepEqual(r, tt.rls) {
   146  			t.Fatalf("Expected %v, actual %v\n", tt.rls, r)
   147  		}
   148  	}
   149  }
   150  
   151  func TestMemoryDelete(t *testing.T) {
   152  	var tests = []struct {
   153  		desc string
   154  		key  string
   155  		err  bool
   156  	}{
   157  		{"release key should exist", "rls-a.v1", false},
   158  		{"release key should not exist", "rls-a.v5", true},
   159  	}
   160  
   161  	ts := tsFixtureMemory(t)
   162  	start, err := ts.Query(map[string]string{"name": "rls-a"})
   163  	if err != nil {
   164  		t.Errorf("Query failed: %s", err)
   165  	}
   166  	startLen := len(start)
   167  	for _, tt := range tests {
   168  		if rel, err := ts.Delete(tt.key); err != nil {
   169  			if !tt.err {
   170  				t.Fatalf("Failed %q to get '%s': %q\n", tt.desc, tt.key, err)
   171  			}
   172  			continue
   173  		} else if fmt.Sprintf("%s.v%d", rel.Name, rel.Version) != tt.key {
   174  			t.Fatalf("Asked for delete on %s, but deleted %d", tt.key, rel.Version)
   175  		}
   176  		_, err := ts.Get(tt.key)
   177  		if err == nil {
   178  			t.Errorf("Expected an error when asking for a deleted key")
   179  		}
   180  	}
   181  
   182  	// Make sure that the deleted records are gone.
   183  	end, err := ts.Query(map[string]string{"name": "rls-a"})
   184  	if err != nil {
   185  		t.Errorf("Query failed: %s", err)
   186  	}
   187  	endLen := len(end)
   188  
   189  	if startLen <= endLen {
   190  		t.Errorf("expected start %d to be less than end %d", startLen, endLen)
   191  		for _, ee := range end {
   192  			t.Logf("Name: %s, Version: %d", ee.Name, ee.Version)
   193  		}
   194  	}
   195  
   196  }