github.com/Jeffail/benthos/v3@v3.65.0/lib/output/writer/tests/cache_test.go (about) 1 package tests 2 3 import ( 4 "fmt" 5 "testing" 6 7 "github.com/Jeffail/benthos/v3/lib/cache" 8 "github.com/Jeffail/benthos/v3/lib/log" 9 "github.com/Jeffail/benthos/v3/lib/manager" 10 "github.com/Jeffail/benthos/v3/lib/message" 11 "github.com/Jeffail/benthos/v3/lib/metrics" 12 "github.com/Jeffail/benthos/v3/lib/output/writer" 13 14 _ "github.com/Jeffail/benthos/v3/public/components/all" 15 ) 16 17 func TestCacheBasic(t *testing.T) { 18 mgrConf := manager.NewConfig() 19 mgrConf.Caches["foo"] = cache.NewConfig() 20 21 mgr, err := manager.New(mgrConf, nil, log.Noop(), metrics.Noop()) 22 if err != nil { 23 t.Fatal(err) 24 } 25 26 cacheConf := writer.NewCacheConfig() 27 cacheConf.Target = "foo" 28 cacheConf.Key = "${!json(\"key\")}" 29 30 c, err := writer.NewCache(cacheConf, mgr, log.Noop(), metrics.Noop()) 31 if err != nil { 32 t.Fatal(err) 33 } 34 35 exp := map[string]string{} 36 for i := 0; i < 100; i++ { 37 key := fmt.Sprintf("key%v", i) 38 value := fmt.Sprintf(`{"key":"%v","test":"hello world"}`, key) 39 exp[key] = value 40 if err := c.Write(message.New([][]byte{[]byte(value)})); err != nil { 41 t.Fatal(err) 42 } 43 } 44 45 memCache, err := mgr.GetCache("foo") 46 if err != nil { 47 t.Fatal(err) 48 } 49 for k, v := range exp { 50 res, err := memCache.Get(k) 51 if err != nil { 52 t.Errorf("Missing key '%v': %v", k, err) 53 } 54 if exp, act := v, string(res); exp != act { 55 t.Errorf("Wrong result: %v != %v", act, exp) 56 } 57 } 58 } 59 60 func TestCacheBatches(t *testing.T) { 61 mgrConf := manager.NewConfig() 62 mgrConf.Caches["foo"] = cache.NewConfig() 63 64 mgr, err := manager.New(mgrConf, nil, log.Noop(), metrics.Noop()) 65 if err != nil { 66 t.Fatal(err) 67 } 68 69 cacheConf := writer.NewCacheConfig() 70 cacheConf.Target = "foo" 71 cacheConf.Key = "${!json(\"key\")}" 72 73 c, err := writer.NewCache(cacheConf, mgr, log.Noop(), metrics.Noop()) 74 if err != nil { 75 t.Fatal(err) 76 } 77 78 exp := map[string]string{} 79 for i := 0; i < 10; i++ { 80 msg := message.New(nil) 81 for j := 0; j < 10; j++ { 82 key := fmt.Sprintf("key%v", i*10+j) 83 value := fmt.Sprintf(`{"key":"%v","test":"hello world"}`, key) 84 exp[key] = value 85 msg.Append(message.NewPart([]byte(value))) 86 } 87 if err := c.Write(msg); err != nil { 88 t.Fatal(err) 89 } 90 } 91 92 memCache, err := mgr.GetCache("foo") 93 if err != nil { 94 t.Fatal(err) 95 } 96 for k, v := range exp { 97 res, err := memCache.Get(k) 98 if err != nil { 99 t.Errorf("Missing key '%v': %v", k, err) 100 } 101 if exp, act := v, string(res); exp != act { 102 t.Errorf("Wrong result: %v != %v", act, exp) 103 } 104 } 105 }