github.com/choria-io/go-choria@v0.28.1-0.20240416190746-b3bf9c7d5a45/providers/agent/mcorpc/aggregate/summary_test.go (about)

     1  // Copyright (c) 2020-2022, R.I. Pienaar and the Choria Project contributors
     2  //
     3  // SPDX-License-Identifier: Apache-2.0
     4  
     5  package aggregate
     6  
     7  import (
     8  	"sort"
     9  
    10  	. "github.com/onsi/ginkgo/v2"
    11  	. "github.com/onsi/gomega"
    12  )
    13  
    14  var _ = Describe("SummaryAggregator", func() {
    15  	var (
    16  		err error
    17  		agg *SummaryAggregator
    18  	)
    19  
    20  	BeforeEach(func() {
    21  		agg, err = NewSummaryAggregator([]any{})
    22  		Expect(err).ToNot(HaveOccurred())
    23  	})
    24  
    25  	Describe("ProcessValue", func() {
    26  		It("Should process various values", func() {
    27  			Expect(agg.ProcessValue(1)).ToNot(HaveOccurred())
    28  			Expect(agg.ProcessValue(1)).ToNot(HaveOccurred())
    29  			Expect(agg.ProcessValue(1)).ToNot(HaveOccurred())
    30  			Expect(agg.ProcessValue("a")).ToNot(HaveOccurred())
    31  
    32  			results, err := agg.ResultStrings()
    33  			Expect(err).ToNot(HaveOccurred())
    34  			Expect(results["1"]).To(Equal("3"))
    35  			Expect(results["a"]).To(Equal("1"))
    36  		})
    37  	})
    38  
    39  	Describe("FormattedStrings", func() {
    40  		It("Should calculate a correct width format", func() {
    41  			Expect(agg.ProcessValue("med")).ToNot(HaveOccurred())
    42  			Expect(agg.ProcessValue("looooong")).ToNot(HaveOccurred())
    43  			Expect(agg.ProcessValue("looooong")).ToNot(HaveOccurred())
    44  			Expect(agg.ProcessValue("looooong")).ToNot(HaveOccurred())
    45  			Expect(agg.ProcessValue(1)).ToNot(HaveOccurred())
    46  			Expect(agg.ProcessValue(1)).ToNot(HaveOccurred())
    47  
    48  			results, err := agg.ResultFormattedStrings("")
    49  			Expect(err).ToNot(HaveOccurred())
    50  			Expect(results).To(Equal([]string{
    51  				"looooong: 3",
    52  				"       1: 2",
    53  				"     med: 1",
    54  			}))
    55  
    56  			results, err = agg.ResultFormattedStrings("%s: %d")
    57  			Expect(err).ToNot(HaveOccurred())
    58  			Expect(results).To(Equal([]string{
    59  				"looooong: 3",
    60  				"1: 2",
    61  				"med: 1",
    62  			}))
    63  		})
    64  	})
    65  
    66  	Describe("JSONResults", func() {
    67  		It("Should produce correct JSON", func() {
    68  			Expect(agg.ProcessValue("med")).ToNot(HaveOccurred())
    69  			Expect(agg.ProcessValue("looooong")).ToNot(HaveOccurred())
    70  			Expect(agg.ProcessValue("looooong")).ToNot(HaveOccurred())
    71  			Expect(agg.ProcessValue("looooong")).ToNot(HaveOccurred())
    72  			Expect(agg.ProcessValue(1)).ToNot(HaveOccurred())
    73  			Expect(agg.ProcessValue(1)).ToNot(HaveOccurred())
    74  
    75  			jresults, err := agg.ResultJSON()
    76  			Expect(err).ToNot(HaveOccurred())
    77  			Expect(jresults).To(MatchJSON("{\"1\":2, \"looooong\":3, \"med\":1}"))
    78  		})
    79  	})
    80  
    81  	Describe("Value mapping", func() {
    82  		It("Should format correctly", func() {
    83  			agg, err = NewSummaryAggregator([]any{"item", map[string]any{
    84  				"true":  "enabled",
    85  				"false": "disabled",
    86  				"thing": "other thing",
    87  				"1":     "one",
    88  			}})
    89  			Expect(err).ToNot(HaveOccurred())
    90  
    91  			Expect(agg.ProcessValue("true")).ToNot(HaveOccurred())
    92  			Expect(agg.ProcessValue(true)).ToNot(HaveOccurred())
    93  			Expect(agg.ProcessValue("false")).ToNot(HaveOccurred())
    94  			Expect(agg.ProcessValue(false)).ToNot(HaveOccurred())
    95  			Expect(agg.ProcessValue("false")).ToNot(HaveOccurred())
    96  			Expect(agg.ProcessValue("thing")).ToNot(HaveOccurred())
    97  			Expect(agg.ProcessValue(1)).ToNot(HaveOccurred())
    98  			Expect(agg.ProcessValue("1")).ToNot(HaveOccurred())
    99  			Expect(agg.ProcessValue("not mapped")).ToNot(HaveOccurred())
   100  			results, err := agg.ResultFormattedStrings("")
   101  			Expect(err).ToNot(HaveOccurred())
   102  			sort.Strings(results)
   103  			Expect(results).To(Equal([]string{
   104  				"        one: 2",
   105  				"    enabled: 2",
   106  				"   disabled: 3",
   107  				" not mapped: 1",
   108  				"other thing: 1",
   109  			}))
   110  		})
   111  	})
   112  
   113  	Describe("CustomFormat", func() {
   114  		It("Should format correctly", func() {
   115  			agg, err = NewSummaryAggregator([]any{"item", map[string]any{"format": "%s=%v"}})
   116  			Expect(err).ToNot(HaveOccurred())
   117  
   118  			Expect(agg.ProcessValue("med")).ToNot(HaveOccurred())
   119  			Expect(agg.ProcessValue("looooong")).ToNot(HaveOccurred())
   120  			Expect(agg.ProcessValue("looooong")).ToNot(HaveOccurred())
   121  			Expect(agg.ProcessValue("looooong")).ToNot(HaveOccurred())
   122  			Expect(agg.ProcessValue(1)).ToNot(HaveOccurred())
   123  			Expect(agg.ProcessValue(1)).ToNot(HaveOccurred())
   124  			results, err := agg.ResultFormattedStrings("")
   125  			Expect(err).ToNot(HaveOccurred())
   126  			Expect(results).To(Equal([]string{
   127  				"looooong=3",
   128  				"1=2",
   129  				"med=1",
   130  			}))
   131  		})
   132  	})
   133  })