Files
admin f21fa5b5e8 cdrop — 跨 OS 剪贴板与文件传输服务
Commilitia Drop:自托管的跨设备剪贴板同步与点对点文件传输。

- 后端 Go(chi / SQLite WAL / SSE Hub / WebRTC signaling + 状态机 / Relay ring buffer),编译进单个 distroless 镜像(前端 go:embed)。
- 前端 React + TanStack Router + Zustand,自实现 SSE + WebRTC P2P,NAT 受阻时回退服务端中继;聚珍(Juzhen)CJK 综合排版。
- 桌面端 Wails v2(macOS / Windows),瘦客户端复用 web。
- 鉴权 OIDC PKCE(自建 Casdoor 等),refresh_token 信封加密存系统密钥库;iOS Shortcut 用 HS256 scoped token。

架构文档与变更记录见 docs 分支(PROJECT_BRIEF / FRONTEND_DESIGN / CHANGELOG)。

本次为公开发布初始提交:完整开发历史(含部署细节)留存于私有归档,公开仓库自此干净起步。
2026-06-15 21:38:28 +08:00

55 lines
1.5 KiB
Go

package transfer
import "testing"
func TestIsValidTransition(t *testing.T) {
allowed := map[string][]string{
StatePending: {StateAccepted, StateP2PActive, StateRelayActive, StateCancelled, StateFailed},
StateAccepted: {StateP2PActive, StateRelayActive, StateDone, StateCancelled, StateFailed},
StateP2PActive: {StateRelayActive, StateDone, StateFailed, StateCancelled},
StateRelayActive: {StateDone, StateFailed, StateCancelled},
}
all := []string{StatePending, StateAccepted, StateP2PActive, StateRelayActive,
StateDone, StateFailed, StateCancelled}
for from, tos := range allowed {
ok := map[string]bool{}
for _, to := range tos {
ok[to] = true
}
for _, to := range all {
got := IsValidTransition(from, to)
want := ok[to]
if got != want {
t.Errorf("transition %s→%s: got %v, want %v", from, to, got, want)
}
}
}
// Terminals reject all outbound.
for _, term := range []string{StateDone, StateFailed, StateCancelled} {
for _, to := range all {
if IsValidTransition(term, to) {
t.Errorf("terminal %s should not allow transition to %s", term, to)
}
}
}
}
func TestIsTerminal(t *testing.T) {
cases := map[string]bool{
StatePending: false,
StateAccepted: false,
StateP2PActive: false,
StateRelayActive: false,
StateDone: true,
StateFailed: true,
StateCancelled: true,
}
for s, want := range cases {
if got := IsTerminal(s); got != want {
t.Errorf("IsTerminal(%s): got %v, want %v", s, got, want)
}
}
}