github.com/containers/podman/v2@v2.2.2-0.20210501105131-c1e07d070c4c/pkg/registrar/registrar_test.go (about)

     1  package registrar_test
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/containers/podman/v2/pkg/registrar"
     7  	. "github.com/containers/podman/v2/test/framework"
     8  	. "github.com/onsi/ginkgo"
     9  	. "github.com/onsi/gomega"
    10  )
    11  
    12  // TestRegistrar runs the created specs
    13  func TestRegistrar(t *testing.T) {
    14  	RegisterFailHandler(Fail)
    15  	RunSpecs(t, "Registrar")
    16  }
    17  
    18  // nolint: gochecknoglobals
    19  var t *TestFramework
    20  
    21  var _ = BeforeSuite(func() {
    22  	t = NewTestFramework(NilFunc, NilFunc)
    23  	t.Setup()
    24  })
    25  
    26  var _ = AfterSuite(func() {
    27  	t.Teardown()
    28  })
    29  
    30  // The actual test suite
    31  var _ = t.Describe("Registrar", func() {
    32  	// Constant test data needed by some tests
    33  	const (
    34  		testKey    = "testKey"
    35  		testName   = "testName"
    36  		anotherKey = "anotherKey"
    37  	)
    38  
    39  	// The system under test
    40  	var sut *registrar.Registrar
    41  
    42  	// Prepare the system under test and register a test name and key before
    43  	// each test
    44  	BeforeEach(func() {
    45  		sut = registrar.NewRegistrar()
    46  		Expect(sut.Reserve(testName, testKey)).To(BeNil())
    47  	})
    48  
    49  	t.Describe("Reserve", func() {
    50  		It("should succeed to reserve a new registrar", func() {
    51  			// Given
    52  			// When
    53  			err := sut.Reserve("name", "key")
    54  
    55  			// Then
    56  			Expect(err).To(BeNil())
    57  		})
    58  
    59  		It("should succeed to reserve a registrar twice", func() {
    60  			// Given
    61  			// When
    62  			err := sut.Reserve(testName, testKey)
    63  
    64  			// Then
    65  			Expect(err).To(BeNil())
    66  		})
    67  
    68  		It("should fail to reserve an already reserved registrar", func() {
    69  			// Given
    70  			// When
    71  			err := sut.Reserve(testName, anotherKey)
    72  
    73  			// Then
    74  			Expect(err).NotTo(BeNil())
    75  			Expect(err).To(Equal(registrar.ErrNameReserved))
    76  		})
    77  	})
    78  
    79  	t.Describe("Release", func() {
    80  		It("should succeed to release a registered registrar multiple times", func() {
    81  			// Given
    82  			// When
    83  			// Then
    84  			sut.Release(testName)
    85  			sut.Release(testName)
    86  		})
    87  
    88  		It("should succeed to release a unknown registrar multiple times", func() {
    89  			// Given
    90  			// When
    91  			// Then
    92  			sut.Release(anotherKey)
    93  			sut.Release(anotherKey)
    94  		})
    95  
    96  		It("should succeed to release and re-register a registrar", func() {
    97  			// Given
    98  			// When
    99  			sut.Release(testName)
   100  			err := sut.Reserve(testName, testKey)
   101  
   102  			// Then
   103  			Expect(err).To(BeNil())
   104  		})
   105  	})
   106  
   107  	t.Describe("GetNames", func() {
   108  		It("should succeed to retrieve a single name for a registrar", func() {
   109  			// Given
   110  			// When
   111  			names, err := sut.GetNames(testKey)
   112  
   113  			// Then
   114  			Expect(err).To(BeNil())
   115  			Expect(len(names)).To(Equal(1))
   116  			Expect(names[0]).To(Equal(testName))
   117  		})
   118  
   119  		It("should succeed to retrieve all names for a registrar", func() {
   120  			// Given
   121  			testNames := []string{"test1", "test2"}
   122  			for _, name := range testNames {
   123  				Expect(sut.Reserve(name, anotherKey)).To(BeNil())
   124  			}
   125  
   126  			// When
   127  			names, err := sut.GetNames(anotherKey)
   128  
   129  			// Then
   130  			Expect(err).To(BeNil())
   131  			Expect(len(names)).To(Equal(2))
   132  			Expect(names).To(Equal(testNames))
   133  		})
   134  	})
   135  
   136  	t.Describe("GetNames", func() {
   137  		It("should succeed to retrieve a single name for a registrar", func() {
   138  			// Given
   139  			// When
   140  			names, err := sut.GetNames(testKey)
   141  
   142  			// Then
   143  			Expect(err).To(BeNil())
   144  			Expect(len(names)).To(Equal(1))
   145  			Expect(names[0]).To(Equal(testName))
   146  		})
   147  
   148  		It("should succeed to retrieve all names for a registrar", func() {
   149  			// Given
   150  			anotherKey := "anotherKey"
   151  			testNames := []string{"test1", "test2"}
   152  			for _, name := range testNames {
   153  				Expect(sut.Reserve(name, anotherKey)).To(BeNil())
   154  			}
   155  
   156  			// When
   157  			names, err := sut.GetNames(anotherKey)
   158  
   159  			// Then
   160  			Expect(err).To(BeNil())
   161  			Expect(len(names)).To(Equal(2))
   162  			Expect(names).To(Equal(testNames))
   163  		})
   164  	})
   165  
   166  	t.Describe("Delete", func() {
   167  		It("should succeed to delete a registrar", func() {
   168  			// Given
   169  			// When
   170  			sut.Delete(testKey)
   171  
   172  			// Then
   173  			names, err := sut.GetNames(testKey)
   174  			Expect(len(names)).To(BeZero())
   175  			Expect(err).To(Equal(registrar.ErrNoSuchKey))
   176  		})
   177  	})
   178  
   179  	t.Describe("Get", func() {
   180  		It("should succeed to get a key for a registrar", func() {
   181  			// Given
   182  			// When
   183  			key, err := sut.Get(testName)
   184  
   185  			// Then
   186  			Expect(err).To(BeNil())
   187  			Expect(key).To(Equal(testKey))
   188  		})
   189  
   190  		It("should fail to get a key for a not existing registrar", func() {
   191  			// Given
   192  			// When
   193  			key, err := sut.Get("notExistingName")
   194  
   195  			// Then
   196  			Expect(key).To(BeEmpty())
   197  			Expect(err).To(Equal(registrar.ErrNameNotReserved))
   198  		})
   199  	})
   200  
   201  	t.Describe("GetAll", func() {
   202  		It("should succeed to get all names", func() {
   203  			// Given
   204  			// When
   205  			names := sut.GetAll()
   206  
   207  			// Then
   208  			Expect(len(names)).To(Equal(1))
   209  			Expect(len(names[testKey])).To(Equal(1))
   210  			Expect(names[testKey][0]).To(Equal(testName))
   211  		})
   212  	})
   213  })