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 }