mirror of
https://github.com/Buriburizaem0n/nezha_domains.git
synced 2026-09-23 03:30:11 +00:00
test(agentcompat): add evidence validation
Co-authored-by: naiba/CloudCode <hi+cloudcode@nai.ba>
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
package evidence
|
||||
|
||||
import (
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
func TestEvidence_TransferHashRejectsEverySuccessOnlyField(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
mutate func(*transferEvidence)
|
||||
}{
|
||||
{"upload bytes", func(value *transferEvidence) { value.UploadBytes = 1 }},
|
||||
{"download bytes", func(value *transferEvidence) { value.DownloadBytes = 1 }},
|
||||
{"upload hash", func(value *transferEvidence) { value.UploadSHA256 = "stale" }},
|
||||
{"download hash", func(value *transferEvidence) { value.DownloadSHA256 = "stale" }},
|
||||
{"upload chunks", func(value *transferEvidence) { value.UploadChunks = 1 }},
|
||||
{"download chunks", func(value *transferEvidence) { value.DownloadChunks = 1 }},
|
||||
{"upload duration", func(value *transferEvidence) { value.UploadDuration = time.Nanosecond }},
|
||||
{"download duration", func(value *transferEvidence) { value.DownloadDuration = time.Nanosecond }},
|
||||
{"retained heap", func(value *transferEvidence) { value.RetainedHeapBytes = 1 }},
|
||||
{"mode", func(value *transferEvidence) { value.Mode = "0640" }},
|
||||
{"create dirs", func(value *transferEvidence) { value.CreateDirs = true }},
|
||||
{"upload replay", func(value *transferEvidence) { value.UploadReplayRejected = true }},
|
||||
{"download replay", func(value *transferEvidence) { value.DownloadReplayRejected = true }},
|
||||
{"oversize", func(value *transferEvidence) { value.OversizeRejected = true }},
|
||||
}
|
||||
for _, test := range tests {
|
||||
t.Run(test.name, func(t *testing.T) {
|
||||
dir := t.TempDir()
|
||||
writeDedicatedExecutableEvidence(t, dir, "transfer-100mib", "transfer-hash", false)
|
||||
artifact := validTransferArtifact("transfer-hash", false)
|
||||
test.mutate(&artifact.Evidence)
|
||||
writeJSONEvidenceFile(t, dir, "transfer.json", artifact)
|
||||
if err := ValidateDirectory(dir); err == nil {
|
||||
t.Fatal("stale transfer success field accepted")
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestEvidence_DashboardExitRejectsEveryPostFaultField(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
mutate func(*reconnectEvidence)
|
||||
}{
|
||||
{"dashboard after", func(value *reconnectEvidence) { value.Runtime.DashboardAfter.PID = 1 }},
|
||||
{"agent after", func(value *reconnectEvidence) { value.Runtime.AgentAfter.PID = 1 }},
|
||||
{"state before restart", func(value *reconnectEvidence) { value.Runtime.StateGenerationBeforeAgentRestart = 1 }},
|
||||
{"state after restart", func(value *reconnectEvidence) { value.Runtime.StateGenerationAfterAgentRestart = 1 }},
|
||||
{"identity dashboard config", func(value *reconnectEvidence) { value.Identity.DashboardConfigUnchanged = true }},
|
||||
{"identity agent config", func(value *reconnectEvidence) { value.Identity.AgentConfigUnchanged = true }},
|
||||
{"identity fixture", func(value *reconnectEvidence) { value.Identity.DashboardFixtureUnchanged = true }},
|
||||
{"clients recreated", func(value *reconnectEvidence) { value.Identity.ClientsRecreated = true }},
|
||||
{"bootstrap recreated", func(value *reconnectEvidence) { value.Identity.BootstrapRecreated = true }},
|
||||
{"reconnect timestamp", func(value *reconnectEvidence) { value.Lifecycle.ReconnectAt = time.Now() }},
|
||||
{"reconnect interval", func(value *reconnectEvidence) { value.Lifecycle.ReconnectInterval = time.Second }},
|
||||
{"dashboard receipts", func(value *reconnectEvidence) { value.Lifecycle.DashboardReceipts = []receiptPair{{}} }},
|
||||
{"agent receipts", func(value *reconnectEvidence) { value.Lifecycle.AgentReceipts = []receiptPair{{}} }},
|
||||
{"stale accounting", func(value *reconnectEvidence) { value.Lifecycle.StaleGenerationReceipts = 1 }},
|
||||
{"duplicate accounting", func(value *reconnectEvidence) { value.Lifecycle.DuplicateTaskIDs = 1 }},
|
||||
{"lost accounting", func(value *reconnectEvidence) { value.Lifecycle.LostResultIDs = 1 }},
|
||||
{"observation server", func(value *reconnectEvidence) { value.Observation.ServerID = 1 }},
|
||||
{"observation uuid", func(value *reconnectEvidence) { value.Observation.UUID = "stale" }},
|
||||
{"old generation", func(value *reconnectEvidence) { value.Observation.OldGeneration = 1 }},
|
||||
{"new generation", func(value *reconnectEvidence) { value.Observation.NewGeneration = 1 }},
|
||||
{"disconnect observation", func(value *reconnectEvidence) { value.Observation.DisconnectAt = time.Now() }},
|
||||
{"reconnect observation", func(value *reconnectEvidence) { value.Observation.ReconnectAt = time.Now() }},
|
||||
{"task ids", func(value *reconnectEvidence) { value.Observation.TaskIDs = []uint64{1} }},
|
||||
{"result ids", func(value *reconnectEvidence) { value.Observation.ResultIDs = []uint64{1} }},
|
||||
{"post reconnect", func(value *reconnectEvidence) { value.Observation.PostReconnect = true }},
|
||||
{"agent restarted", func(value *reconnectEvidence) { value.Observation.AgentRestarted = true }},
|
||||
}
|
||||
for _, test := range tests {
|
||||
t.Run(test.name, func(t *testing.T) {
|
||||
dir := t.TempDir()
|
||||
writeDedicatedExecutableEvidence(t, dir, "reconnect", "dashboard-exit", false)
|
||||
artifact := validReconnectArtifact("dashboard-exit", false)
|
||||
test.mutate(&artifact.Evidence)
|
||||
writeJSONEvidenceFile(t, dir, "reconnect.json", artifact)
|
||||
if err := ValidateDirectory(dir); err == nil {
|
||||
t.Fatal("stale reconnect success field accepted")
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user