github.com/Myriad-Dreamin/tarus@v0.0.0-20220422082640-5379b6998284/cmd/tests/containerd-judge/main.go (about) 1 package main 2 3 import ( 4 "context" 5 "encoding/hex" 6 "fmt" 7 "github.com/Myriad-Dreamin/tarus/api/tarus" 8 hr_bytes "github.com/Myriad-Dreamin/tarus/pkg/hr-bytes" 9 tarus_judge "github.com/Myriad-Dreamin/tarus/pkg/tarus-judge" 10 oci_judge "github.com/Myriad-Dreamin/tarus/pkg/tarus-judge/oci" 11 ) 12 13 func hexUrl(s string) string { 14 return fmt.Sprintf("hexbytes://%s", hex.EncodeToString([]byte(s))) 15 } 16 17 func echoTest(client *oci_judge.ContainerdJudgeServiceServer, ctx context.Context) { 18 if _, err := tarus_judge.TransientJudge(client, ctx, &tarus_judge.TransientJudgeRequest{ 19 ImageId: "docker.io/library/ubuntu:20.04", 20 BinTarget: "data/workdir-judge-engine0/echo_test", 21 MakeJudgeRequest: &tarus.MakeJudgeRequest{ 22 Testcases: []*tarus.JudgeTestcase{ 23 { 24 JudgeKey: []byte("001"), 25 IoProvider: "memory", 26 Input: hexUrl(``), 27 Answer: hexUrl(`hello world`), 28 }, 29 }, 30 }, 31 }); err != nil { 32 panic(err) 33 } 34 } 35 36 func compileEchoTest(client *oci_judge.ContainerdJudgeServiceServer, ctx context.Context) { 37 if _, err := tarus_judge.TransientJudge(client, ctx, &tarus_judge.TransientJudgeRequest{ 38 ImageId: "docker.io/library/ubuntu:20.04", 39 CompileFile: "cmd/tests/containerd-judge/programs/echo_test.cc", 40 MakeJudgeRequest: &tarus.MakeJudgeRequest{ 41 Testcases: []*tarus.JudgeTestcase{ 42 { 43 JudgeKey: []byte("001"), 44 IoProvider: "memory", 45 Input: hexUrl(``), 46 Answer: hexUrl(`hello world`), 47 }, 48 }, 49 }, 50 }); err != nil { 51 panic(err) 52 } 53 } 54 55 func sleepTest(client *oci_judge.ContainerdJudgeServiceServer, ctx context.Context) { 56 if _, err := tarus_judge.TransientJudge(client, ctx, &tarus_judge.TransientJudgeRequest{ 57 ImageId: "docker.io/library/ubuntu:20.04", 58 BinTarget: "data/workdir-judge-engine0/sleep_test", 59 MakeJudgeRequest: &tarus.MakeJudgeRequest{ 60 Testcases: []*tarus.JudgeTestcase{ 61 { 62 JudgeKey: []byte("001"), 63 IoProvider: "memory", 64 Input: hexUrl(``), 65 Answer: hexUrl(`hello world`), 66 }, 67 }, 68 }, 69 }); err != nil { 70 panic(err) 71 } 72 } 73 74 func sleepHardTest(client *oci_judge.ContainerdJudgeServiceServer, ctx context.Context) { 75 if _, err := tarus_judge.TransientJudge(client, ctx, &tarus_judge.TransientJudgeRequest{ 76 ImageId: "docker.io/library/ubuntu:20.04", 77 BinTarget: "data/workdir-judge-engine0/sleep_hard_test", 78 MakeJudgeRequest: &tarus.MakeJudgeRequest{ 79 Testcases: []*tarus.JudgeTestcase{ 80 { 81 JudgeKey: []byte("001"), 82 IoProvider: "memory", 83 Input: hexUrl(``), 84 Answer: hexUrl(`hello world`), 85 }, 86 { 87 JudgeKey: []byte("002"), 88 IoProvider: "memory", 89 Input: hexUrl(``), 90 Answer: hexUrl(`hello world`), 91 }, 92 }, 93 }, 94 }); err != nil { 95 panic(err) 96 } 97 } 98 99 func ioTest(client *oci_judge.ContainerdJudgeServiceServer, ctx context.Context) { 100 if _, err := tarus_judge.TransientJudge(client, ctx, &tarus_judge.TransientJudgeRequest{ 101 ImageId: "docker.io/library/ubuntu:20.04", 102 BinTarget: "data/workdir-judge-engine0/io_test", 103 MakeJudgeRequest: &tarus.MakeJudgeRequest{ 104 Testcases: []*tarus.JudgeTestcase{ 105 { 106 JudgeKey: []byte("001"), 107 IoProvider: "memory", 108 Input: hexUrl("1 2\n"), 109 Answer: hexUrl(`3`), 110 }, 111 }, 112 }, 113 }); err != nil { 114 panic(err) 115 } 116 } 117 118 func inputTest(client *oci_judge.ContainerdJudgeServiceServer, ctx context.Context) { 119 if _, err := tarus_judge.TransientJudge(client, ctx, &tarus_judge.TransientJudgeRequest{ 120 ImageId: "docker.io/library/ubuntu:20.04", 121 BinTarget: "data/workdir-judge-engine0/echo_input_test", 122 MakeJudgeRequest: &tarus.MakeJudgeRequest{ 123 Testcases: []*tarus.JudgeTestcase{ 124 { 125 JudgeKey: []byte("001"), 126 IoProvider: "memory", 127 Input: hexUrl("yes\n"), 128 Answer: hexUrl(`yes`), 129 }, 130 }, 131 }, 132 }); err != nil { 133 panic(err) 134 } 135 } 136 137 func statusTest(client *oci_judge.ContainerdJudgeServiceServer, ctx context.Context) { 138 testcases := []*tarus.JudgeTestcase{ 139 { 140 JudgeKey: []byte("001"), 141 IoProvider: "memory", 142 Input: hexUrl("exit\n"), 143 Answer: hexUrl(``), 144 }, 145 { 146 JudgeKey: []byte("002"), 147 IoProvider: "memory", 148 Input: hexUrl("abort\n"), 149 Answer: hexUrl(``), 150 }, 151 { 152 JudgeKey: []byte("003"), 153 IoProvider: "memory", 154 Input: hexUrl("null\n"), 155 Answer: hexUrl(``), 156 }, 157 { 158 JudgeKey: []byte("004"), 159 IoProvider: "memory", 160 Input: hexUrl("fpe\n"), 161 Answer: hexUrl(``), 162 }, 163 // safe usage 164 { 165 JudgeKey: []byte("005"), 166 IoProvider: "memory", 167 Input: hexUrl(fmt.Sprintf("memory=%d\n", int64(384*hr_bytes.MB))), 168 Answer: hexUrl(``), 169 }, 170 // mle, 384 + 128 >= 512MB 171 { 172 JudgeKey: []byte("006"), 173 IoProvider: "memory", 174 Input: hexUrl(fmt.Sprintf("memory=%d,memory=%d\n", int64(384*hr_bytes.MB), int64(128*hr_bytes.MB))), 175 Answer: hexUrl(``), 176 }, 177 // ok, unused virtual memory are not traced by page usage 178 { 179 JudgeKey: []byte("007"), 180 IoProvider: "memory", 181 Input: hexUrl(fmt.Sprintf("virt_memory=%d\n", int64(384*hr_bytes.MB))), 182 Answer: hexUrl(``), 183 }, 184 // early rejected by system, gets runtime error 185 { 186 JudgeKey: []byte("008"), 187 IoProvider: "memory", 188 Input: hexUrl(fmt.Sprintf("virt_memory=%d\n", int64(512*hr_bytes.MB))), 189 Answer: hexUrl(``), 190 }, 191 } 192 193 //for i := 1; i < 0x20; i++ { 194 // testcases = append(testcases, &tarus.JudgeTestcase{ 195 // JudgeKey: []byte(fmt.Sprintf("signal:%v", syscall.Signal(i).String())), 196 // IoProvider: "memory", 197 // Input: hexUrl(fmt.Sprintf("signal=%v\n", i)), 198 // Answer: hexUrl(``), 199 // }) 200 // testcases = append(testcases, &tarus.JudgeTestcase{ 201 // JudgeKey: []byte(fmt.Sprintf("signal:%v (exit code detection)", syscall.Signal(i).String())), 202 // IoProvider: "memory", 203 // Input: hexUrl(fmt.Sprintf("exit=%v\n", i+128)), 204 // Answer: hexUrl(``), 205 // }) 206 //} 207 208 statusCodes, err := tarus_judge.TransientJudge(client, ctx, &tarus_judge.TransientJudgeRequest{ 209 ImageId: "docker.io/library/ubuntu:20.04", 210 BinTarget: "data/workdir-judge-engine0/mock_solver", 211 MakeJudgeRequest: &tarus.MakeJudgeRequest{ 212 Testcases: testcases, 213 }, 214 }) 215 if err != nil { 216 panic(err) 217 } 218 for _, status := range statusCodes.Items { 219 fmt.Println(status) 220 } 221 } 222 223 func main() { 224 client, err := oci_judge.NewContainerdServer() 225 if err != nil { 226 panic(err) 227 } 228 defer func() { 229 _ = client.Close() 230 }() 231 232 ctx := context.Background() 233 234 //if err = client.ImportOCIArchive(ctx, "ubuntu.tar"); err != nil { 235 // panic(err) 236 //} 237 238 // echoTest(client, ctx) 239 // sleepTest(client, ctx) 240 // sleepHardTest(client, ctx) 241 // ioTest(client, ctx) 242 // inputTest(client, ctx) 243 statusTest(client, ctx) 244 compileEchoTest(client, ctx) 245 }