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  }