package domain import ( "errors" "strings" "testing" "unicode/utf8" rvboxv1 "github.com/rvbox/rvbox/gen/go/rvbox/v1" ) func TestDomainErrorMapping_HP_PROTO_09(t *testing.T) { t.Parallel() retryable := map[rvboxv1.ControlError_Code]bool{ rvboxv1.ControlError_OFFLINE: true, rvboxv1.ControlError_CAPACITY_EXHAUSTED: true, rvboxv1.ControlError_TRANSIENT: true, rvboxv1.ControlError_INTERNAL: true, } for code := rvboxv1.ControlError_Code(0); code <= rvboxv1.ControlError_CODE_ELEVATION_UNAVAILABLE; code++ { domainErr := NewError(code, "message", "01890a5d-ac96-7a11-b234-123456789abc") wire := domainErr.ControlError() if wire.Code != code || wire.Message != "message" || wire.Retryable != retryable[code] || wire.IssueUuid != domainErr.IssueUUID { t.Errorf("mapping for %s = %+v", code, wire) } } } func TestDomainErrorBoundsAndCause_HP_PROTO_09(t *testing.T) { t.Parallel() cause := errors.New("cause") domainErr := NewError(rvboxv1.ControlError_INTERNAL, strings.Repeat("界", MaxProtocolDetailBytes), "").WithCause(cause) if !errors.Is(domainErr, cause) { t.Fatal("domain error did not unwrap its cause") } if len(domainErr.Message) > MaxProtocolDetailBytes || !utf8.ValidString(domainErr.Message) { t.Fatalf("bounded message has %d bytes or invalid UTF-8", len(domainErr.Message)) } } func TestWindowsPrelaunchErrorCodes_HP_WINCTX_01(t *testing.T) { t.Parallel() if got := NewExecutionContextUnavailable("normal", "").Code; got != rvboxv1.ControlError_CODE_EXECUTION_CONTEXT_UNAVAILABLE { t.Fatalf("normal context code = %s", got) } if got := NewElevationUnavailable("elevated", "").Code; got != rvboxv1.ControlError_CODE_ELEVATION_UNAVAILABLE { t.Fatalf("elevation code = %s", got) } }