Something went wrong. Try again.
My PaaS for hosting multiple elasticsearch clusters in a Kubernetes environment.
Something went wrong. Try again.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798package server_test
import ( "errors" "net/http" "net/http/httptest" "strings" "testing"
"level3.git.onstackit.cloud/LEVEL3/gabriel/src/api" "level3.git.onstackit.cloud/LEVEL3/gabriel/src/server/mock")
func TestGetInstanceLogs_missingUsername(t *testing.T) { pdb, srch := &mock.FakePagedbService{}, &mock.FakeSearchService{} srv, _ := newTestServer(t, pdb, srch, "")
rec := httptest.NewRecorder() r := httptest.NewRequest(http.MethodGet, "/v1/elasticsearch/instances/i/logs", nil) srv.GetInstanceLogs(rec, r, "i")
assertStatus(t, rec, http.StatusInternalServerError) if pdb.ValidateInstanceOwnerCallCount() != 0 { t.Fatal("ValidateInstanceOwner should not be called without username") }}
func TestGetInstanceLogs_notOwner(t *testing.T) { pdb, srch := &mock.FakePagedbService{}, &mock.FakeSearchService{} pdb.ValidateInstanceOwnerReturns(errors.New("instance 'i' not found")) srv, _ := newTestServer(t, pdb, srch, "")
rec := httptest.NewRecorder() r := simulateSuccessfulLogin(httptest.NewRequest(http.MethodGet, "/v1/elasticsearch/instances/i/logs", nil), "alice") srv.GetInstanceLogs(rec, r, "i")
assertStatus(t, rec, http.StatusNotFound) if body := rec.Body.String(); !strings.Contains(body, "Instance not found") { t.Fatalf("body = %q", body) } _, instanceId, owner := pdb.ValidateInstanceOwnerArgsForCall(0) if instanceId != "i" || owner != "alice" { t.Fatalf("ValidateInstanceOwner args = (%q,%q)", instanceId, owner) }}
func TestGetInstanceLogs_success_ordersDescending(t *testing.T) { pdb, srch := &mock.FakePagedbService{}, &mock.FakeSearchService{} pdb.ValidateInstanceOwnerReturns(nil) srv, store := newTestServer(t, pdb, srch, "")
// Insert three entries; Add() stamps them with time.Now() at call time, // so each successive entry has a strictly-greater (or equal) timestamp. store.Add("i", api.CreateInstance, api.Success, "first", "alice") store.Add("i", api.GetInstance, api.Success, "second", "alice") store.Add("i", api.DeleteInstance, api.Failure, "third", "bob")
rec := httptest.NewRecorder() r := simulateSuccessfulLogin(httptest.NewRequest(http.MethodGet, "/v1/elasticsearch/instances/i/logs", nil), "alice") srv.GetInstanceLogs(rec, r, "i")
assertStatus(t, rec, http.StatusOK) var got []api.LogEntry decodeBody(t, rec, &got) if len(got) != 3 { t.Fatalf("len = %d, want 3 (got %+v)", len(got), got) } // Descending by timestamp: "third" first, "first" last. if got[0].Message != "third" || got[2].Message != "first" { t.Fatalf("order = [%s,%s,%s], want [third,second,first]", got[0].Message, got[1].Message, got[2].Message) } // Verify descending invariant regardless of labels. for i := 1; i < len(got); i++ { if got[i].Timestamp.After(got[i-1].Timestamp) { t.Errorf("entry %d (%s) after entry %d (%s): not descending", i, got[i].Message, i-1, got[i-1].Message) } }}
func TestGetInstanceLogs_success_empty(t *testing.T) { pdb, srch := &mock.FakePagedbService{}, &mock.FakeSearchService{} pdb.ValidateInstanceOwnerReturns(nil) srv, _ := newTestServer(t, pdb, srch, "")
rec := httptest.NewRecorder() r := simulateSuccessfulLogin(httptest.NewRequest(http.MethodGet, "/v1/elasticsearch/instances/i/logs", nil), "alice") srv.GetInstanceLogs(rec, r, "i")
assertStatus(t, rec, http.StatusOK) var got []api.LogEntry decodeBody(t, rec, &got) if got == nil || len(got) != 0 { t.Fatalf("got = %+v, want empty non-nil slice", got) }}