github.com/jiasir/deis@v1.12.2/logger/storage/ringbuffer/adapter_test.go (about)

     1  package ringbuffer
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  )
     7  
     8  const app string = "test-app"
     9  
    10  func TestReadFromNonExistingApp(t *testing.T) {
    11  	// Initialize a new storage adapter
    12  	a, err := NewStorageAdapter(10)
    13  	if err != nil {
    14  		t.Error(err)
    15  	}
    16  	// No logs have been writter; there should be no ringBuffer for app
    17  	messages, err := a.Read(app, 10)
    18  	if messages != nil {
    19  		t.Error("Expected no messages, but got some")
    20  	}
    21  	if err == nil || err.Error() != fmt.Sprintf("Could not find logs for '%s'", app) {
    22  		t.Error("Did not receive expected error message")
    23  	}
    24  }
    25  
    26  func TestWithBadBufferSizes(t *testing.T) {
    27  	// Initialize with invalid buffer sizes
    28  	for _, size := range []int{-1, 0} {
    29  		a, err := NewStorageAdapter(size)
    30  		if a != nil {
    31  			t.Error("Expected no storage adapter, but got one")
    32  		}
    33  		if err == nil || err.Error() != fmt.Sprintf("Invalid ringBuffer size: %d", size) {
    34  			t.Error("Did not receive expected error message")
    35  		}
    36  	}
    37  }
    38  
    39  func TestLogs(t *testing.T) {
    40  	// Initialize with small buffers
    41  	a, err := NewStorageAdapter(10)
    42  	if err != nil {
    43  		t.Error(err)
    44  	}
    45  	// And write a few logs to it, but do NOT fill it up
    46  	for i := 0; i < 5; i++ {
    47  		if err := a.Write(app, fmt.Sprintf("message %d", i)); err != nil {
    48  			t.Error(err)
    49  		}
    50  	}
    51  	// Read more logs than there are
    52  	messages, err := a.Read(app, 8)
    53  	if err != nil {
    54  		t.Error(err)
    55  	}
    56  	// Should only get as many messages as we actually have
    57  	if len(messages) != 5 {
    58  		t.Errorf("only expected 5 log messages, got %d", len(messages))
    59  	}
    60  	// Read fewer logs than there are
    61  	messages, err = a.Read(app, 3)
    62  	if err != nil {
    63  		t.Error(err)
    64  	}
    65  	// Should get the 3 MOST RECENT logs
    66  	if len(messages) != 3 {
    67  		t.Errorf("only expected 5 log messages, got %d", len(messages))
    68  	}
    69  	for i := 0; i < 3; i++ {
    70  		expectedMessage := fmt.Sprintf("message %d", i+2)
    71  		if messages[i] != expectedMessage {
    72  			t.Errorf("expected: \"%s\", got \"%s\"", expectedMessage, messages[i])
    73  		}
    74  	}
    75  	// Overfill the buffer
    76  	for i := 5; i < 11; i++ {
    77  		if err := a.Write(app, fmt.Sprintf("message %d", i)); err != nil {
    78  			t.Error(err)
    79  		}
    80  	}
    81  	// Read more logs than the buffer can hold
    82  	messages, err = a.Read(app, 20)
    83  	if err != nil {
    84  		t.Error(err)
    85  	}
    86  	// Should only get as many messages as the buffer can hold
    87  	if len(messages) != 10 {
    88  		t.Errorf("only expected 10 log messages, got %d", len(messages))
    89  	}
    90  	// And they should only be the 10 MOST RECENT logs
    91  	for i := 0; i < 10; i++ {
    92  		expectedMessage := fmt.Sprintf("message %d", i+1)
    93  		if messages[i] != expectedMessage {
    94  			t.Errorf("expected: \"%s\", got \"%s\"", expectedMessage, messages[i])
    95  		}
    96  	}
    97  }
    98  
    99  func TestDestroy(t *testing.T) {
   100  	a, err := NewStorageAdapter(10)
   101  	if err != nil {
   102  		t.Error(err)
   103  	}
   104  	// Write a log to create the file
   105  	if err := a.Write(app, "Hello, log!"); err != nil {
   106  		t.Error(err)
   107  	}
   108  	// A ringBuffer should exist for the app
   109  	if _, ok := a.ringBuffers[app]; !ok {
   110  		t.Error("Log ringbuffer was expected to exist, but doesn't.")
   111  	}
   112  	// Now destroy it
   113  	if err := a.Destroy(app); err != nil {
   114  		t.Error(err)
   115  	}
   116  	// Now check that the ringBuffer no longer exists
   117  	if _, ok := a.ringBuffers[app]; ok {
   118  		t.Error("Log ringbuffer still exist, but was expected not to.")
   119  	}
   120  }