Add opt-in Tentacle protocol 1.1, explicit remote grants, lifecycle IPC and expiring core leases in both SDKs. Revoke access before update preparation, including failed updates. Add transient secret entries, shared Braille cell export and isolated Xorg recovery experiments with focused tests and documented limitations. Production consent, desktop services and live interoperability remain pending.
36 lines
1.8 KiB
Go
36 lines
1.8 KiB
Go
// Copyright (c) 2026 Storm Dragon
|
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
package tentaclewire
|
|
|
|
import "testing"
|
|
|
|
func TestSessionNegotiationRequiresIndependentGrants(t *testing.T) {
|
|
cases := []struct {
|
|
name string
|
|
minor int
|
|
apis, grants []string
|
|
valid bool
|
|
}{
|
|
{"legacy", 0, []string{"commands", "presentation"}, []string{"commands", "presentation"}, true},
|
|
{"legacy order", 0, []string{"presentation", "commands"}, []string{"presentation", "commands"}, false},
|
|
{"events only", 1, []string{"session-events", "commands"}, nil, true},
|
|
{"explicit sets", 1, []string{"remote-access", "interaction", "session-events", "commands", "presentation"}, []string{"output-observe", "interaction", "presentation"}, true},
|
|
{"missing events", 1, []string{"remote-access", "commands"}, []string{"output-observe"}, false},
|
|
{"grant without API", 1, []string{"session-events", "commands"}, []string{"output-observe"}, false},
|
|
{"API without grant", 1, []string{"session-events", "commands", "remote-access"}, nil, false},
|
|
{"unknown grant", 1, []string{"session-events", "commands", "remote-access"}, []string{"execute"}, false},
|
|
{"duplicate grant", 1, []string{"session-events", "commands", "remote-access"}, []string{"output-observe", "output-observe"}, false},
|
|
{"duplicate API", 1, []string{"session-events", "commands", "commands"}, nil, false},
|
|
{"missing prerequisite", 1, []string{"session-events", "commands", "interaction"}, []string{"interaction"}, false},
|
|
{"legacy capability in 1.1", 1, []string{"session-events", "commands"}, []string{"commands"}, false},
|
|
{"future version", 2, []string{"session-events", "commands"}, nil, false},
|
|
}
|
|
for _, item := range cases {
|
|
t.Run(item.name, func(t *testing.T) {
|
|
if ValidNegotiation(item.minor, item.apis, item.grants) != item.valid {
|
|
t.Fatal("wrong negotiation result")
|
|
}
|
|
})
|
|
}
|
|
}
|