...

Source file src/github.com/onsi/gomega/gmeasure/cache_test.go

Documentation: github.com/onsi/gomega/gmeasure

     1  package gmeasure_test
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  
     7  	. "github.com/onsi/ginkgo/v2"
     8  	. "github.com/onsi/gomega"
     9  	"github.com/onsi/gomega/gmeasure"
    10  )
    11  
    12  var _ = Describe("Cache", func() {
    13  	var path string
    14  	var cache gmeasure.ExperimentCache
    15  	var e1, e2 *gmeasure.Experiment
    16  
    17  	BeforeEach(func() {
    18  		var err error
    19  		path = fmt.Sprintf("./cache-%d", GinkgoParallelProcess())
    20  		cache, err = gmeasure.NewExperimentCache(path)
    21  		Ω(err).ShouldNot(HaveOccurred())
    22  		e1 = gmeasure.NewExperiment("Experiment-1")
    23  		e1.RecordValue("foo", 32)
    24  		e2 = gmeasure.NewExperiment("Experiment-2")
    25  		e2.RecordValue("bar", 64)
    26  	})
    27  
    28  	AfterEach(func() {
    29  		Ω(os.RemoveAll(path)).Should(Succeed())
    30  	})
    31  
    32  	Describe("when creating a cache that points to a file", func() {
    33  		It("errors", func() {
    34  			f, err := os.Create("cache-temp-file")
    35  			Ω(err).ShouldNot(HaveOccurred())
    36  			f.Close()
    37  			cache, err := gmeasure.NewExperimentCache("cache-temp-file")
    38  			Ω(err).Should(MatchError("cache-temp-file is not a directory"))
    39  			Ω(cache).Should(BeZero())
    40  			Ω(os.RemoveAll("cache-temp-file")).Should(Succeed())
    41  		})
    42  	})
    43  
    44  	Describe("the happy path", func() {
    45  		It("can save, load, list, delete, and clear the cache", func() {
    46  			Ω(cache.Save("e1", 1, e1)).Should(Succeed())
    47  			Ω(cache.Save("e2", 7, e2)).Should(Succeed())
    48  
    49  			Ω(cache.Load("e1", 1)).Should(Equal(e1))
    50  			Ω(cache.Load("e2", 7)).Should(Equal(e2))
    51  
    52  			Ω(cache.List()).Should(ConsistOf(
    53  				gmeasure.CachedExperimentHeader{"e1", 1},
    54  				gmeasure.CachedExperimentHeader{"e2", 7},
    55  			))
    56  
    57  			Ω(cache.Delete("e2")).Should(Succeed())
    58  			Ω(cache.Load("e1", 1)).Should(Equal(e1))
    59  			Ω(cache.Load("e2", 7)).Should(BeNil())
    60  			Ω(cache.List()).Should(ConsistOf(
    61  				gmeasure.CachedExperimentHeader{"e1", 1},
    62  			))
    63  
    64  			Ω(cache.Clear()).Should(Succeed())
    65  			Ω(cache.List()).Should(BeEmpty())
    66  			Ω(cache.Load("e1", 1)).Should(BeNil())
    67  			Ω(cache.Load("e2", 7)).Should(BeNil())
    68  		})
    69  	})
    70  
    71  	Context("with an empty cache", func() {
    72  		It("should list nothing", func() {
    73  			Ω(cache.List()).Should(BeEmpty())
    74  		})
    75  
    76  		It("should not error when clearing", func() {
    77  			Ω(cache.Clear()).Should(Succeed())
    78  		})
    79  
    80  		It("returs nil when loading a non-existing experiment", func() {
    81  			Ω(cache.Load("floop", 17)).Should(BeNil())
    82  		})
    83  	})
    84  
    85  	Describe("version management", func() {
    86  		BeforeEach(func() {
    87  			Ω(cache.Save("e1", 7, e1)).Should(Succeed())
    88  		})
    89  
    90  		Context("when the cached version is older than the requested version", func() {
    91  			It("returns nil", func() {
    92  				Ω(cache.Load("e1", 8)).Should(BeNil())
    93  			})
    94  		})
    95  
    96  		Context("when the cached version equals the requested version", func() {
    97  			It("returns the cached version", func() {
    98  				Ω(cache.Load("e1", 7)).Should(Equal(e1))
    99  			})
   100  		})
   101  
   102  		Context("when the cached version is newer than the requested version", func() {
   103  			It("returns the cached version", func() {
   104  				Ω(cache.Load("e1", 6)).Should(Equal(e1))
   105  			})
   106  		})
   107  	})
   108  
   109  })
   110  

View as plain text