You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
1.9 KiB
65 lines
1.9 KiB
|
2 months ago
|
package api
|
||
|
|
|
||
|
|
import (
|
||
|
|
"encoding/json"
|
||
|
|
"net/http"
|
||
|
|
"net/http/httptest"
|
||
|
|
"reflect"
|
||
|
|
"testing"
|
||
|
|
|
||
|
|
"tera-clone/services/tera-api/internal/adapters/mock"
|
||
|
|
"tera-clone/services/tera-api/internal/domain"
|
||
|
|
)
|
||
|
|
|
||
|
|
func TestPortConfigurationReadSkipsTelemetryAndPreservesSettings(t *testing.T) {
|
||
|
|
store := mock.NewStore(fixedClock)
|
||
|
|
controller := &countingRuntimeSerialController{}
|
||
|
|
handler := NewRouterWithOptions(store, RouterOptions{
|
||
|
|
SerialController: controller, SessionController: runtimeSessionController{},
|
||
|
|
})
|
||
|
|
request := httptest.NewRequest(http.MethodGet, "/api/v1/ports?limit=48&runtime=false", nil)
|
||
|
|
request.Header.Set("X-Mock-Actor", "mock-admin")
|
||
|
|
response := httptest.NewRecorder()
|
||
|
|
handler.ServeHTTP(response, request)
|
||
|
|
if response.Code != http.StatusOK {
|
||
|
|
t.Fatalf("status=%d body=%s", response.Code, response.Body.String())
|
||
|
|
}
|
||
|
|
if controller.calls() != 0 {
|
||
|
|
t.Fatal("configuration read waited for serial telemetry")
|
||
|
|
}
|
||
|
|
var actual []domain.Port
|
||
|
|
if err := json.Unmarshal(response.Body.Bytes(), &actual); err != nil {
|
||
|
|
t.Fatal(err)
|
||
|
|
}
|
||
|
|
expected, err := store.Ports(request.Context())
|
||
|
|
if err != nil {
|
||
|
|
t.Fatal(err)
|
||
|
|
}
|
||
|
|
for i := range expected {
|
||
|
|
expected[i].Status = "unknown"
|
||
|
|
expected[i].Runtime = nil
|
||
|
|
expected[i].ConnectedUsers = 0
|
||
|
|
expected[i].Writer = ""
|
||
|
|
}
|
||
|
|
// Normalize JSON omission semantics while comparing every configuration field.
|
||
|
|
encoded, err := json.Marshal(expected)
|
||
|
|
if err != nil {
|
||
|
|
t.Fatal(err)
|
||
|
|
}
|
||
|
|
var normalized []domain.Port
|
||
|
|
if err := json.Unmarshal(encoded, &normalized); err != nil {
|
||
|
|
t.Fatal(err)
|
||
|
|
}
|
||
|
|
if !reflect.DeepEqual(actual, normalized) {
|
||
|
|
t.Fatal("configuration fields changed")
|
||
|
|
}
|
||
|
|
|
||
|
|
request = httptest.NewRequest(http.MethodGet, "/api/v1/ports?limit=48", nil)
|
||
|
|
request.Header.Set("X-Mock-Actor", "mock-admin")
|
||
|
|
response = httptest.NewRecorder()
|
||
|
|
handler.ServeHTTP(response, request)
|
||
|
|
if response.Code != http.StatusOK || controller.calls() != 1 {
|
||
|
|
t.Fatal("default read no longer collects live telemetry")
|
||
|
|
}
|
||
|
|
}
|