github.com/dctrud/umoci@v0.4.3-0.20191016193643-05a1d37de015/oci/config/generate/spec_test.go (about)

     1  /*
     2   * umoci: Umoci Modifies Open Containers' Images
     3   * Copyright (C) 2016, 2017, 2018 SUSE LLC.
     4   *
     5   * Licensed under the Apache License, Version 2.0 (the "License");
     6   * you may not use this file except in compliance with the License.
     7   * You may obtain a copy of the License at
     8   *
     9   *    http://www.apache.org/licenses/LICENSE-2.0
    10   *
    11   * Unless required by applicable law or agreed to in writing, software
    12   * distributed under the License is distributed on an "AS IS" BASIS,
    13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    14   * See the License for the specific language governing permissions and
    15   * limitations under the License.
    16   */
    17  
    18  package generate
    19  
    20  import (
    21  	"io"
    22  	"io/ioutil"
    23  	"os"
    24  	"reflect"
    25  	"testing"
    26  	"time"
    27  	// Import is necessary for go-digest.
    28  	_ "crypto/sha256"
    29  
    30  	"github.com/opencontainers/go-digest"
    31  )
    32  
    33  func TestWriteTo(t *testing.T) {
    34  	g := New()
    35  
    36  	fh, err := ioutil.TempFile("", "umoci-TestWriteTo")
    37  	if err != nil {
    38  		t.Fatal(err)
    39  	}
    40  	defer os.RemoveAll(fh.Name())
    41  	defer fh.Close()
    42  
    43  	size, err := g.WriteTo(fh)
    44  	if err != nil {
    45  		t.Errorf("failed to write: %+v", err)
    46  	}
    47  
    48  	fi, err := fh.Stat()
    49  	if err != nil {
    50  		t.Errorf("failed to stat: %+v", err)
    51  	}
    52  
    53  	if fi.Size() != size {
    54  		t.Errorf("wrong size: expected %d, got %d", size, fi.Size())
    55  	}
    56  }
    57  
    58  func TestConfigUser(t *testing.T) {
    59  	g := New()
    60  	expected := "some_value"
    61  
    62  	g.SetConfigUser(expected)
    63  	got := g.ConfigUser()
    64  
    65  	if expected != got {
    66  		t.Errorf("ConfigUser get/set doesn't match: expected %v, got %v", expected, got)
    67  	}
    68  }
    69  
    70  func TestConfigWorkingDir(t *testing.T) {
    71  	g := New()
    72  	expected := "some_value"
    73  
    74  	g.SetConfigWorkingDir(expected)
    75  	got := g.ConfigWorkingDir()
    76  
    77  	if expected != got {
    78  		t.Errorf("ConfigWorkingDir get/set doesn't match: expected %v, got %v", expected, got)
    79  	}
    80  }
    81  
    82  func TestArchitecture(t *testing.T) {
    83  	g := New()
    84  	expected := "some_value"
    85  
    86  	g.SetArchitecture(expected)
    87  	got := g.Architecture()
    88  
    89  	if expected != got {
    90  		t.Errorf("Architecture get/set doesn't match: expected %v, got %v", expected, got)
    91  	}
    92  }
    93  
    94  func TestOS(t *testing.T) {
    95  	g := New()
    96  	expected := "some_value"
    97  
    98  	g.SetOS(expected)
    99  	got := g.OS()
   100  
   101  	if expected != got {
   102  		t.Errorf("OS get/set doesn't match: expected %v, got %v", expected, got)
   103  	}
   104  }
   105  
   106  func TestAuthor(t *testing.T) {
   107  	g := New()
   108  	expected := "some_value"
   109  
   110  	g.SetAuthor(expected)
   111  	got := g.Author()
   112  
   113  	if expected != got {
   114  		t.Errorf("Author get/set doesn't match: expected %v, got %v", expected, got)
   115  	}
   116  }
   117  
   118  func TestRootfsType(t *testing.T) {
   119  	g := New()
   120  	expected := "some_value"
   121  
   122  	g.SetRootfsType(expected)
   123  	got := g.RootfsType()
   124  
   125  	if expected != got {
   126  		t.Errorf("RootfsType get/set doesn't match: expected %v, got %v", expected, got)
   127  	}
   128  }
   129  
   130  func TestRootfsDiffIDs(t *testing.T) {
   131  	g := New()
   132  
   133  	values := []string{"a", "b", "c"}
   134  	diffids := []digest.Digest{}
   135  	for _, value := range values {
   136  		digester := digest.SHA256.Digester()
   137  		_, _ = io.WriteString(digester.Hash(), value)
   138  		diffids = append(diffids, digester.Digest())
   139  	}
   140  
   141  	g.ClearRootfsDiffIDs()
   142  	for _, diffid := range diffids {
   143  		g.AddRootfsDiffID(diffid)
   144  	}
   145  
   146  	got := g.RootfsDiffIDs()
   147  
   148  	if !reflect.DeepEqual(diffids, got) {
   149  		t.Errorf("RootfsDiffIDs doesn't match: expected %v, got %v", diffids, got)
   150  	}
   151  }
   152  
   153  func TestConfigEntrypoint(t *testing.T) {
   154  	g := New()
   155  	entrypoint := []string{"a", "b", "c"}
   156  
   157  	g.SetConfigEntrypoint(entrypoint)
   158  	got := g.ConfigEntrypoint()
   159  
   160  	if !reflect.DeepEqual(entrypoint, got) {
   161  		t.Errorf("ConfigEntrypoint doesn't match: expected %v, got %v", entrypoint, got)
   162  	}
   163  }
   164  
   165  func TestConfigCmd(t *testing.T) {
   166  	g := New()
   167  	entrypoint := []string{"a", "b", "c"}
   168  
   169  	g.SetConfigCmd(entrypoint)
   170  	got := g.ConfigCmd()
   171  
   172  	if !reflect.DeepEqual(entrypoint, got) {
   173  		t.Errorf("ConfigCmd doesn't match: expected %v, got %v", entrypoint, got)
   174  	}
   175  }
   176  
   177  func TestConfigExposedPorts(t *testing.T) {
   178  	g := New()
   179  	exposedports := map[string]struct{}{
   180  		"a": {},
   181  		"b": {},
   182  		"c": {},
   183  	}
   184  
   185  	g.ClearConfigExposedPorts()
   186  	for exposedport := range exposedports {
   187  		g.AddConfigExposedPort(exposedport)
   188  	}
   189  
   190  	got := g.ConfigExposedPorts()
   191  	if !reflect.DeepEqual(exposedports, got) {
   192  		t.Errorf("ConfigExposedPorts doesn't match: expected %v, got %v", exposedports, got)
   193  	}
   194  
   195  	delete(exposedports, "a")
   196  	g.RemoveConfigExposedPort("a")
   197  	delete(got, "b")
   198  
   199  	got = g.ConfigExposedPorts()
   200  	if !reflect.DeepEqual(exposedports, got) {
   201  		t.Errorf("ConfigExposedPorts doesn't match: expected %v, got %v", exposedports, got)
   202  	}
   203  }
   204  
   205  func TestConfigVolumes(t *testing.T) {
   206  	g := New()
   207  	volumes := map[string]struct{}{
   208  		"a": {},
   209  		"b": {},
   210  		"c": {},
   211  	}
   212  
   213  	g.ClearConfigVolumes()
   214  	for volume := range volumes {
   215  		g.AddConfigVolume(volume)
   216  	}
   217  
   218  	got := g.ConfigVolumes()
   219  	if !reflect.DeepEqual(volumes, got) {
   220  		t.Errorf("ConfigVolumes doesn't match: expected %v, got %v", volumes, got)
   221  	}
   222  
   223  	delete(volumes, "a")
   224  	g.RemoveConfigVolume("a")
   225  	delete(got, "b")
   226  
   227  	got = g.ConfigVolumes()
   228  	if !reflect.DeepEqual(volumes, got) {
   229  		t.Errorf("ConfigVolumes doesn't match: expected %v, got %v", volumes, got)
   230  	}
   231  }
   232  
   233  func TestConfigEnv(t *testing.T) {
   234  	g := New()
   235  	env := []string{
   236  		"HOME=a,b,c",
   237  		"TEST=a=b=c",
   238  		"ANOTHER=",
   239  	}
   240  
   241  	g.ClearConfigEnv()
   242  	g.AddConfigEnv("HOME", "a,b,c")
   243  	g.AddConfigEnv("TEST", "a=b=c")
   244  	g.AddConfigEnv("ANOTHER", "")
   245  
   246  	got := g.ConfigEnv()
   247  	if !reflect.DeepEqual(env, got) {
   248  		t.Errorf("ConfigEnv doesn't match: expected %v, got %v", env, got)
   249  	}
   250  
   251  	env[1] = "TEST=different"
   252  	g.AddConfigEnv("TEST", "different")
   253  
   254  	got = g.ConfigEnv()
   255  	if !reflect.DeepEqual(env, got) {
   256  		t.Errorf("ConfigEnv doesn't match: expected %v, got %v", env, got)
   257  	}
   258  }
   259  
   260  func TestConfigLabels(t *testing.T) {
   261  	g := New()
   262  	labels := map[string]string{
   263  		"some":  "key",
   264  		"value": "mappings",
   265  		"go":    "here",
   266  	}
   267  
   268  	g.ClearConfigLabels()
   269  	for k, v := range labels {
   270  		g.AddConfigLabel(k, v)
   271  	}
   272  
   273  	got := g.ConfigLabels()
   274  	if !reflect.DeepEqual(labels, got) {
   275  		t.Errorf("ConfigLabels doesn't match: expected %v, got %v", labels, got)
   276  	}
   277  
   278  	delete(labels, "some")
   279  	g.RemoveConfigLabel("some")
   280  
   281  	got = g.ConfigLabels()
   282  	if !reflect.DeepEqual(labels, got) {
   283  		t.Errorf("ConfigLabels doesn't match: expected %v, got %v", labels, got)
   284  	}
   285  
   286  	delete(labels, "nonexist")
   287  	g.RemoveConfigLabel("nonexist")
   288  	delete(got, "value")
   289  
   290  	got = g.ConfigLabels()
   291  	if !reflect.DeepEqual(labels, got) {
   292  		t.Errorf("ConfigLabels doesn't match: expected %v, got %v", labels, got)
   293  	}
   294  }
   295  
   296  func TestConfigStopSignal(t *testing.T) {
   297  	g := New()
   298  	signals := []string{
   299  		"SIGSTOP",
   300  		"SIGKILL",
   301  		"SIGUSR1",
   302  		"SIGINFO",
   303  		"SIGPWR",
   304  		"SIGRT13",
   305  	}
   306  
   307  	for _, signal := range signals {
   308  		g.SetConfigStopSignal(signal)
   309  		got := g.ConfigStopSignal()
   310  		if signal != got {
   311  			t.Errorf("ConfigStopSignal doesn't match: expected %q, got %q", signal, got)
   312  		}
   313  	}
   314  }
   315  
   316  func TestCreated(t *testing.T) {
   317  	g := New()
   318  	timeA := time.Now()
   319  	g.SetCreated(timeA)
   320  	timeB := g.Created()
   321  
   322  	if !timeA.Equal(timeB) {
   323  		t.Errorf("created get/set doesn't match: expected %v, got %v", timeA, timeB)
   324  	}
   325  }