Skip to content

Commit 1e4677a

Browse files
endpoint tests
1 parent 8328baa commit 1e4677a

File tree

2 files changed

+117
-21
lines changed

2 files changed

+117
-21
lines changed

quest_test.go

+86-7
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ package main
1818

1919
import (
2020
"bytes"
21+
"encoding/json"
2122
"fmt"
2223
"os/exec"
2324
"strings"
@@ -404,11 +405,89 @@ func TestSmokeGetRetention(t *testing.T) {
404405

405406
func TestActivateHotTier(t *testing.T) {
406407
CreateStream(t, NewGlob.QueryClient, NewGlob.Stream)
407-
activateHotTier(t)
408-
disableHotTier(t)
408+
activateHotTier(t, "", true)
409+
disableHotTier(t, false)
409410
DeleteStream(t, NewGlob.QueryClient, NewGlob.Stream)
410411
}
411412

413+
func TestActivateNonExistentHotTier(t *testing.T) {
414+
if NewGlob.IngestorUrl.String() == "" {
415+
t.Skip("Skipping in standalone mode")
416+
}
417+
418+
status, _ := activateHotTier(t, "", false)
419+
require.NotEqualf(t, status, 200, "Hot tier was activated for a non-existent stream.")
420+
}
421+
422+
func TestHotTierWithTimePartition(t *testing.T) {
423+
time_partition_stream := NewGlob.Stream + "timepartition"
424+
timeHeader := map[string]string{"X-P-Time-Partition": "source_time", "X-P-Time-Partition-Limit": "365d"}
425+
CreateStreamWithHeader(t, NewGlob.QueryClient, time_partition_stream, timeHeader)
426+
427+
payload := StreamHotTier{
428+
Size: "20 Gib",
429+
}
430+
jsonPayload, _ := json.Marshal(payload)
431+
432+
req, _ := NewGlob.QueryClient.NewRequest("PUT", "logstream/"+time_partition_stream+"/hottier", bytes.NewBuffer(jsonPayload))
433+
req.Header.Set("Content-Type", "application/json")
434+
response, _ := NewGlob.QueryClient.Do(req)
435+
body := readAsString(response.Body)
436+
437+
require.NotEqualf(t, response.StatusCode, 200, "Hot tier activation succeeded for time partition with message: %s, but was expected to fail", body)
438+
}
439+
440+
func TestHotTierHugeDiskSize(t *testing.T) {
441+
if NewGlob.IngestorUrl.String() == "" {
442+
t.Skip("Skipping in standalone mode")
443+
}
444+
445+
CreateStream(t, NewGlob.QueryClient, NewGlob.Stream)
446+
status, _ := activateHotTier(t, "500GiB", false) // activate hot tier with huge disk size
447+
require.NotEqualf(t, status, 200, "Hot tier was activated for a non-existent stream.")
448+
DeleteStream(t, NewGlob.QueryClient, NewGlob.Stream)
449+
}
450+
451+
func TestHotTierIncreaseSize(t *testing.T) {
452+
if NewGlob.IngestorUrl.String() == "" {
453+
t.Skip("Skipping in standalone mode")
454+
}
455+
456+
CreateStream(t, NewGlob.QueryClient, NewGlob.Stream)
457+
activateHotTier(t, "", true)
458+
status, err := activateHotTier(t, "30 GiB", false) // increase disk size
459+
require.Equalf(t, 200, status, "Increasing disk size of hot tier failed with error: %s", err)
460+
DeleteStream(t, NewGlob.QueryClient, NewGlob.Stream)
461+
}
462+
463+
func TestHotTierDecreaseSize(t *testing.T) {
464+
if NewGlob.IngestorUrl.String() == "" {
465+
t.Skip("Skipping in standalone mode")
466+
}
467+
468+
CreateStream(t, NewGlob.QueryClient, NewGlob.Stream)
469+
activateHotTier(t, "", true)
470+
status, message := activateHotTier(t, "10 GiB", false) // decrease disk size
471+
require.NotEqualf(t, 200, status, "Decreasing disk size of hot tier should fail but succeeded with message: %s", message)
472+
DeleteStream(t, NewGlob.QueryClient, NewGlob.Stream)
473+
}
474+
475+
func TestGetNonExistentHotTier(t *testing.T) {
476+
if NewGlob.IngestorUrl.String() == "" {
477+
t.Skip("Skipping in standalone mode")
478+
}
479+
480+
getHotTierStatus(t, true)
481+
}
482+
483+
func DisableNonExistentHotTier(t *testing.T) {
484+
if NewGlob.IngestorUrl.String() == "" {
485+
t.Skip("Skipping in standalone mode")
486+
}
487+
488+
disableHotTier(t, true)
489+
}
490+
412491
// create stream, put hot tier, ingest data for a duration, wait for 2-3 mins to see if all data is available in hot tier
413492
func TestHotTierGetsLogs(t *testing.T) {
414493
if NewGlob.IngestorUrl.String() == "" {
@@ -417,11 +496,11 @@ func TestHotTierGetsLogs(t *testing.T) {
417496

418497
// DeleteStream(t, NewGlob.QueryClient, NewGlob.Stream)
419498
createAndIngest(t)
420-
activateHotTier(t)
499+
activateHotTier(t, "", true)
421500
time.Sleep(2 * 60 * time.Second) // wait 2 minutes for hot tier to sync
422501

423502
htCount := QueryLogStreamCount(t, NewGlob.QueryClient, NewGlob.Stream, 200)
424-
disableHotTier(t)
503+
disableHotTier(t, false)
425504
DeleteStream(t, NewGlob.QueryClient, NewGlob.Stream)
426505

427506
require.Equalf(t, htCount, `[{"count":200}]`, "Ingested 200 logs, but hot tier contains %s", htCount)
@@ -441,11 +520,11 @@ func TestHotTierGetsLogsAfter(t *testing.T) {
441520

442521
// create a second stream with hot tier
443522
createAndIngest(t)
444-
activateHotTier(t)
523+
activateHotTier(t, "", true)
445524
time.Sleep(2 * 60 * time.Second) // wait 2 minutes for hot tier to sync
446525

447526
htCount := QueryLogStreamCount(t, NewGlob.QueryClient, NewGlob.Stream, 200)
448-
disableHotTier(t)
527+
disableHotTier(t, false)
449528
DeleteStream(t, NewGlob.QueryClient, NewGlob.Stream)
450529

451530
require.Equalf(t, prevCount, htCount, "With hot tier disabled, the count was %s but with it, the count is %s", prevCount, htCount)
@@ -460,7 +539,7 @@ func TestHotTierLogCount(t *testing.T) {
460539
createAndIngest(t)
461540
countBefore := QueryLogStreamCount(t, NewGlob.QueryClient, NewGlob.Stream, 200)
462541

463-
activateHotTier(t)
542+
activateHotTier(t, "", true)
464543
time.Sleep(60 * 2 * time.Second) // wait for 2 minutes to allow hot tier to sync
465544

466545
countAfter := QueryLogStreamCount(t, NewGlob.QueryClient, NewGlob.Stream, 200)

test_utils.go

+31-14
Original file line numberDiff line numberDiff line change
@@ -581,27 +581,35 @@ func checkAPIAccess(t *testing.T, client HTTPClient, stream string, role string)
581581
}
582582
}
583583

584-
func activateHotTier(t *testing.T) {
584+
func activateHotTier(t *testing.T, size string, verify bool) (int, string) {
585+
if size == "" {
586+
size = "20 GiB" // default hot tier size
587+
}
588+
585589
payload := StreamHotTier{
586-
Size: "20 GiB", // set hot tier size to be 20 GB
590+
Size: size,
587591
}
588-
json, _ := json.Marshal(payload)
592+
jsonPayload, _ := json.Marshal(payload)
589593

590-
req, _ := NewGlob.QueryClient.NewRequest("PUT", "logstream/"+NewGlob.Stream+"/hottier", bytes.NewBuffer(json))
594+
req, _ := NewGlob.QueryClient.NewRequest("PUT", "logstream/"+NewGlob.Stream+"/hottier", bytes.NewBuffer(jsonPayload))
591595
req.Header.Set("Content-Type", "application/json")
592596
response, err := NewGlob.QueryClient.Do(req)
593597
body := readAsString(response.Body)
594598

595-
if NewGlob.IngestorUrl.String() != "" {
596-
require.Equalf(t, 200, response.StatusCode, "Server returned unexpected http code: %s and response: %s", response.Status, body)
597-
require.NoErrorf(t, err, "Activating hot tier failed in distributed mode: %s", err)
598-
} else {
599-
// right now, hot tier is unavailable in standalone so anything other than 200 is fine
600-
require.NotEqualf(t, 200, response.StatusCode, "Hot tier has been activated in standalone mode: %s and response: %s", response.Status, body)
599+
if verify {
600+
if NewGlob.IngestorUrl.String() != "" {
601+
require.Equalf(t, 200, response.StatusCode, "Server returned unexpected http code: %s and response: %s", response.Status, body)
602+
require.NoErrorf(t, err, "Activating hot tier failed in distributed mode: %s", err)
603+
} else {
604+
// right now, hot tier is unavailable in standalone so anything other than 200 is fine
605+
require.NotEqualf(t, 200, response.StatusCode, "Hot tier has been activated in standalone mode: %s and response: %s", response.Status, body)
606+
}
601607
}
608+
609+
return response.StatusCode, body
602610
}
603611

604-
func getHotTierStatus(t *testing.T) *StreamHotTier {
612+
func getHotTierStatus(t *testing.T, shouldFail bool) *StreamHotTier {
605613
req, err := NewGlob.QueryClient.NewRequest("GET", "logstream/"+NewGlob.Stream+"/hottier", nil)
606614
require.NoError(t, err, "Failed to create request")
607615

@@ -613,7 +621,11 @@ func getHotTierStatus(t *testing.T) *StreamHotTier {
613621

614622
body := readAsString(response.Body)
615623

616-
require.Equal(t, 200, response.StatusCode, "GET hot tier failed with status code: %d & body: %s", response.StatusCode, body)
624+
if shouldFail {
625+
require.NotEqualf(t, 200, response.StatusCode, "Hot tier was expected to fail but succeeded with body: %s", body)
626+
} else {
627+
require.Equalf(t, 200, response.StatusCode, "GET hot tier failed with status code: %d & body: %s", response.StatusCode, body)
628+
}
617629

618630
var hotTierStatus StreamHotTier
619631
err = json.Unmarshal([]byte(body), &hotTierStatus)
@@ -622,11 +634,16 @@ func getHotTierStatus(t *testing.T) *StreamHotTier {
622634
return &hotTierStatus
623635
}
624636

625-
func disableHotTier(t *testing.T) {
637+
func disableHotTier(t *testing.T, shouldFail bool) {
626638
req, _ := NewGlob.QueryClient.NewRequest("DELETE", "logstream/"+NewGlob.Stream+"/hottier", nil)
627639
response, err := NewGlob.QueryClient.Do(req)
628640
body := readAsString(response.Body)
629-
require.Equalf(t, 200, response.StatusCode, "Server returned http code: %s and response: %s", response.Status, body)
641+
642+
if shouldFail {
643+
require.NotEqualf(t, 200, response.StatusCode, "Non-existent hot tier was disabled with response: %s", body)
644+
} else {
645+
require.Equalf(t, 200, response.StatusCode, "Server returned http code: %s and response: %s", response.Status, body)
646+
}
630647
require.NoErrorf(t, err, "Disabling hot tier failed: %s", err)
631648
}
632649

0 commit comments

Comments
 (0)