github.com/Jeffail/benthos/v3@v3.65.0/lib/buffer/single/memory_test.go (about)

     1  package single
     2  
     3  import (
     4  	"fmt"
     5  	"math/rand"
     6  	"sync"
     7  	"testing"
     8  	"time"
     9  
    10  	"github.com/Jeffail/benthos/v3/lib/message"
    11  	"github.com/Jeffail/benthos/v3/lib/types"
    12  )
    13  
    14  func TestMemoryBasic(t *testing.T) {
    15  	t.Skip("DEPRECATED")
    16  
    17  	n := 100
    18  
    19  	block := NewMemory(MemoryConfig{Limit: 100000})
    20  
    21  	for i := 0; i < n; i++ {
    22  		if _, err := block.PushMessage(message.New(
    23  			[][]byte{
    24  				[]byte("hello"),
    25  				[]byte("world"),
    26  				[]byte("12345"),
    27  				[]byte(fmt.Sprintf("test%v", i)),
    28  			},
    29  		)); err != nil {
    30  			t.Error(err)
    31  		}
    32  	}
    33  
    34  	for i := 0; i < n; i++ {
    35  		m, err := block.NextMessage()
    36  		if err != nil {
    37  			t.Error(err)
    38  			return
    39  		}
    40  		if m.Len() != 4 {
    41  			t.Errorf("Wrong # parts, %v != %v", m.Len(), 4)
    42  		} else if expected, actual := fmt.Sprintf("test%v", i), string(m.Get(3).Get()); expected != actual {
    43  			t.Errorf("Wrong order of messages, %v != %v", expected, actual)
    44  		}
    45  		if _, err := block.ShiftMessage(); err != nil {
    46  			t.Error(err)
    47  		}
    48  	}
    49  }
    50  
    51  func TestMemoryBacklogCounter(t *testing.T) {
    52  	t.Skip("DEPRECATED")
    53  
    54  	block := NewMemory(MemoryConfig{Limit: 100000})
    55  
    56  	if _, err := block.PushMessage(message.New(
    57  		[][]byte{[]byte("1234")}, // 4 bytes + 4 bytes
    58  	)); err != nil {
    59  		t.Error(err)
    60  		return
    61  	}
    62  
    63  	if expected, actual := 16, block.backlog(); expected != actual {
    64  		t.Errorf("Wrong backlog count: %v != %v", expected, actual)
    65  	}
    66  
    67  	if _, err := block.PushMessage(message.New(
    68  		[][]byte{
    69  			[]byte("1234"),
    70  			[]byte("1234"),
    71  		}, // ( 4 bytes + 4 bytes ) * 2
    72  	)); err != nil {
    73  		t.Error(err)
    74  		return
    75  	}
    76  
    77  	if expected, actual := 40, block.backlog(); expected != actual {
    78  		t.Errorf("Wrong backlog count: %v != %v", expected, actual)
    79  	}
    80  
    81  	if _, err := block.ShiftMessage(); err != nil {
    82  		t.Error(err)
    83  	}
    84  
    85  	if expected, actual := 24, block.backlog(); expected != actual {
    86  		t.Errorf("Wrong backlog count: %v != %v", expected, actual)
    87  	}
    88  
    89  	if _, err := block.ShiftMessage(); err != nil {
    90  		t.Error(err)
    91  	}
    92  
    93  	if expected, actual := 0, block.backlog(); expected != actual {
    94  		t.Errorf("Wrong backlog count: %v != %v", expected, actual)
    95  	}
    96  }
    97  
    98  func TestMemoryNearLimit(t *testing.T) {
    99  	t.Skip("DEPRECATED")
   100  
   101  	n, iter := 50, 5
   102  
   103  	block := NewMemory(MemoryConfig{Limit: 2285})
   104  
   105  	for j := 0; j < iter; j++ {
   106  		for i := 0; i < n; i++ {
   107  			if _, err := block.PushMessage(message.New(
   108  				[][]byte{
   109  					[]byte("hello"),
   110  					[]byte("world"),
   111  					[]byte("12345"),
   112  					[]byte(fmt.Sprintf("test%v", i)),
   113  				},
   114  			)); err != nil {
   115  				t.Error(err)
   116  				return
   117  			}
   118  		}
   119  
   120  		for i := 0; i < n; i++ {
   121  			m, err := block.NextMessage()
   122  			if err != nil {
   123  				t.Error(err)
   124  				return
   125  			}
   126  			if m.Len() != 4 {
   127  				t.Errorf("Wrong # parts, %v != %v", m.Len(), 4)
   128  			} else if expected, actual := fmt.Sprintf("test%v", i), string(m.Get(3).Get()); expected != actual {
   129  				t.Errorf("Wrong order of messages, %v != %v", expected, actual)
   130  			}
   131  			if _, err := block.ShiftMessage(); err != nil {
   132  				t.Error(err)
   133  			}
   134  		}
   135  	}
   136  }
   137  
   138  func TestMemoryLoopingRandom(t *testing.T) {
   139  	t.Skip("DEPRECATED")
   140  
   141  	n, iter := 50, 5
   142  
   143  	block := NewMemory(MemoryConfig{Limit: 8000})
   144  
   145  	for j := 0; j < iter; j++ {
   146  		for i := 0; i < n; i++ {
   147  			b := make([]byte, rand.Int()%100)
   148  			for k := range b {
   149  				b[k] = '0'
   150  			}
   151  			if _, err := block.PushMessage(message.New(
   152  				[][]byte{
   153  					b,
   154  					[]byte(fmt.Sprintf("test%v", i)),
   155  				},
   156  			)); err != nil {
   157  				t.Error(err)
   158  			}
   159  		}
   160  
   161  		for i := 0; i < n; i++ {
   162  			m, err := block.NextMessage()
   163  			if err != nil {
   164  				t.Error(err)
   165  				return
   166  			}
   167  			if m.Len() != 2 {
   168  				t.Errorf("Wrong # parts, %v != %v", m.Len(), 4)
   169  				return
   170  			} else if expected, actual := fmt.Sprintf("test%v", i), string(m.Get(1).Get()); expected != actual {
   171  				t.Errorf("Wrong order of messages, %v != %v", expected, actual)
   172  				return
   173  			}
   174  			if _, err := block.ShiftMessage(); err != nil {
   175  				t.Error(err)
   176  			}
   177  		}
   178  	}
   179  }
   180  
   181  func TestMemoryLockStep(t *testing.T) {
   182  	t.Skip("DEPRECATED")
   183  
   184  	n := 10000
   185  
   186  	block := NewMemory(MemoryConfig{Limit: 1000})
   187  
   188  	wg := sync.WaitGroup{}
   189  	wg.Add(1)
   190  
   191  	go func() {
   192  		defer wg.Done()
   193  		for i := 0; i < n; i++ {
   194  			m, err := block.NextMessage()
   195  			if err != nil {
   196  				t.Error(err)
   197  			}
   198  			if m.Len() != 4 {
   199  				t.Errorf("Wrong # parts, %v != %v", m.Len(), 4)
   200  				return
   201  			} else if expected, actual := fmt.Sprintf("test%v", i), string(m.Get(3).Get()); expected != actual {
   202  				t.Errorf("Wrong order of messages, %v != %v", expected, actual)
   203  				return
   204  			}
   205  			if _, err := block.ShiftMessage(); err != nil {
   206  				t.Error(err)
   207  			}
   208  		}
   209  	}()
   210  
   211  	go func() {
   212  		for i := 0; i < n; i++ {
   213  			if _, err := block.PushMessage(message.New(
   214  				[][]byte{
   215  					[]byte("hello"),
   216  					[]byte("world"),
   217  					[]byte("12345"),
   218  					[]byte(fmt.Sprintf("test%v", i)),
   219  				},
   220  			)); err != nil {
   221  				t.Error(err)
   222  			}
   223  		}
   224  	}()
   225  
   226  	wg.Wait()
   227  }
   228  
   229  func TestMemoryClose(t *testing.T) {
   230  	t.Skip("DEPRECATED")
   231  
   232  	// Test reader block
   233  
   234  	block := NewMemory(MemoryConfig{Limit: 20})
   235  	doneChan := make(chan struct{})
   236  
   237  	go func() {
   238  		_, err := block.NextMessage()
   239  		if err != types.ErrTypeClosed {
   240  			t.Errorf("Wrong error returned: %v != %v", err, types.ErrTypeClosed)
   241  		}
   242  		close(doneChan)
   243  	}()
   244  
   245  	<-time.After(100 * time.Millisecond)
   246  	block.Close()
   247  
   248  	select {
   249  	case <-doneChan:
   250  	case <-time.After(time.Second):
   251  		t.Errorf("Timed out after block close on reader")
   252  	}
   253  
   254  	// Test writer block
   255  
   256  	block = NewMemory(MemoryConfig{Limit: 100})
   257  	doneChan = make(chan struct{})
   258  
   259  	go func() {
   260  		for i := 0; i < 100; i++ {
   261  			if _, err := block.PushMessage(message.New(
   262  				[][]byte{
   263  					[]byte("hello"),
   264  					[]byte("world"),
   265  					[]byte("12345"),
   266  					[]byte(fmt.Sprintf("test%v", i)),
   267  				},
   268  			)); err != nil {
   269  				t.Error(err)
   270  			}
   271  		}
   272  		close(doneChan)
   273  	}()
   274  
   275  	go func() {
   276  		for {
   277  			_, err := block.NextMessage()
   278  			if err == types.ErrTypeClosed {
   279  				return
   280  			} else if err != nil {
   281  				t.Error(err)
   282  			}
   283  			if _, err := block.ShiftMessage(); err != nil {
   284  				t.Error(err)
   285  			}
   286  		}
   287  	}()
   288  
   289  	<-time.After(100 * time.Millisecond)
   290  	block.Close()
   291  
   292  	select {
   293  	case <-doneChan:
   294  	case <-time.After(time.Second * 1):
   295  		t.Errorf("Timed out after block close on writer")
   296  	}
   297  }
   298  
   299  func TestMemoryRejectLargeMessage(t *testing.T) {
   300  	t.Skip("DEPRECATED")
   301  
   302  	tMsg := message.New(make([][]byte, 1))
   303  	tMsg.Get(0).Set([]byte("hello world this message is too long!"))
   304  
   305  	block := NewMemory(MemoryConfig{Limit: 10})
   306  
   307  	_, err := block.PushMessage(tMsg)
   308  	if exp, actual := types.ErrMessageTooLarge, err; exp != actual {
   309  		t.Errorf("Unexpected error: %v != %v", exp, actual)
   310  	}
   311  }