feat: add command domain invariants
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user