Sfoglia il codice sorgente

Merge pull request #11 from rlane/use-assembler

tests/ubpf_*.rs: Use assembler in testcases
Quentin Monnet 8 anni fa
parent
commit
e3a39829c0
3 ha cambiato i file con 975 aggiunte e 1088 eliminazioni
  1. 552 610
      tests/ubpf_jit_x86_64.rs
  2. 34 42
      tests/ubpf_verifier.rs
  3. 389 436
      tests/ubpf_vm.rs

File diff suppressed because it is too large
+ 552 - 610
tests/ubpf_jit_x86_64.rs


+ 34 - 42
tests/ubpf_verifier.rs

@@ -23,17 +23,17 @@
 
 extern crate rbpf;
 
+use rbpf::assembler::assemble;
 use rbpf::ebpf;
 
 #[test]
 #[should_panic(expected = "[Verifier] Error: division by 0 (insn #1)")]
 fn test_verifier_err_div_by_zero_imm() {
-    let prog = &[
-        0xb4, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
-        0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x95, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-    ];
-    let vm = rbpf::EbpfVmNoData::new(prog);
+    let prog = assemble("
+        mov32 r0, 1
+        div32 r0, 0
+        exit").unwrap();
+    let vm = rbpf::EbpfVmNoData::new(&prog);
     vm.prog_exec();
 }
 
@@ -63,67 +63,60 @@ fn test_verifier_err_incomplete_lddw() { // Note: ubpf has test-err-incomplete-l
 #[test]
 #[should_panic(expected = "[Verifier] Error: infinite loop")]
 fn test_verifier_err_infinite_loop() {
-    let prog = &[
-        0x05, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
-        0x95, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-    ];
-    let vm = rbpf::EbpfVmNoData::new(prog);
+    let prog = assemble("
+        ja -1
+        exit").unwrap();
+    let vm = rbpf::EbpfVmNoData::new(&prog);
     vm.prog_exec();
 }
 
 #[test]
 #[should_panic(expected = "[Verifier] Error: invalid destination register (insn #0)")]
 fn test_verifier_err_invalid_reg_dst() {
-    let prog = &[
-        0xb7, 0x0b, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
-        0x95, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-    ];
-    let vm = rbpf::EbpfVmNoData::new(prog);
+    let prog = assemble("
+        mov r11, 1
+        exit").unwrap();
+    let vm = rbpf::EbpfVmNoData::new(&prog);
     vm.prog_exec();
 }
 
 #[test]
 #[should_panic(expected = "[Verifier] Error: invalid source register (insn #0)")]
 fn test_verifier_err_invalid_reg_src() {
-    let prog = &[
-        0xbf, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x95, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-    ];
-    let vm = rbpf::EbpfVmNoData::new(prog);
+    let prog = assemble("
+        mov r0, r11
+        exit").unwrap();
+    let vm = rbpf::EbpfVmNoData::new(&prog);
     vm.prog_exec();
 }
 
 #[test]
 #[should_panic(expected = "[Verifier] Error: jump to middle of LD_DW at #2 (insn #0)")]
 fn test_verifier_err_jmp_lddw() {
-    let prog = &[
-        0x05, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x18, 0x00, 0x00, 0x00, 0x88, 0x77, 0x66, 0x55,
-        0x00, 0x00, 0x00, 0x00, 0x44, 0x33, 0x22, 0x11,
-        0x95, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-    ];
-    let vm = rbpf::EbpfVmNoData::new(prog);
+    let prog = assemble("
+        ja +1
+        lddw r0, 0x1122334455667788
+        exit").unwrap();
+    let vm = rbpf::EbpfVmNoData::new(&prog);
     vm.prog_exec();
 }
 
 #[test]
 #[should_panic(expected = "[Verifier] Error: jump out of code to #3 (insn #0)")]
 fn test_verifier_err_jmp_out() {
-    let prog = &[
-        0x05, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x95, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-    ];
-    let vm = rbpf::EbpfVmNoData::new(prog);
+    let prog = assemble("
+        ja +2
+        exit").unwrap();
+    let vm = rbpf::EbpfVmNoData::new(&prog);
     vm.prog_exec();
 }
 
 #[test]
 #[should_panic(expected = "[Verifier] Error: program does not end with “EXIT” instruction")]
 fn test_verifier_err_no_exit() {
-    let prog = &[
-        0xb4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-    ];
-    let vm = rbpf::EbpfVmNoData::new(prog);
+    let prog = assemble("
+        mov32 r0, 0").unwrap();
+    let vm = rbpf::EbpfVmNoData::new(&prog);
     vm.prog_exec();
 }
 
@@ -157,10 +150,9 @@ fn test_verifier_err_unknown_opcode() {
 #[test]
 #[should_panic(expected = "[Verifier] Error: cannot write into register r10 (insn #0)")]
 fn test_verifier_err_write_r10() {
-    let prog = &[
-        0xb7, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
-        0x95, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-    ];
-    let vm = rbpf::EbpfVmNoData::new(prog);
+    let prog = assemble("
+        mov r10, 1
+        exit").unwrap();
+    let vm = rbpf::EbpfVmNoData::new(&prog);
     vm.prog_exec();
 }

File diff suppressed because it is too large
+ 389 - 436
tests/ubpf_vm.rs


Some files were not shown because too many files changed in this diff