github.com/system-transparency/u-root@v6.0.1-0.20190919065413-ed07a650de4c+incompatible/pkg/memio/io_test.go (about) 1 // Copyright 2012-2019 the u-root Authors. All rights reserved 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package memio 6 7 import ( 8 "fmt" 9 "io/ioutil" 10 "log" 11 "os" 12 "reflect" 13 "testing" 14 ) 15 16 var u8 = Uint8(0x12) 17 18 var tests = []struct { 19 name string 20 addr int64 21 writeData, readData UintN 22 err string 23 }{ 24 { 25 name: "uint8", 26 addr: 0x10, 27 writeData: &[]Uint8{0x12}[0], 28 readData: new(Uint8), 29 }, 30 { 31 name: "uint16", 32 addr: 0x20, 33 writeData: &[]Uint16{0x1234}[0], 34 readData: new(Uint16), 35 }, 36 { 37 name: "uint32", 38 addr: 0x30, 39 writeData: &[]Uint32{0x12345678}[0], 40 readData: new(Uint32), 41 }, 42 { 43 name: "uint64", 44 addr: 0x40, 45 writeData: &[]Uint64{0x1234567890abcdef}[0], 46 readData: new(Uint64), 47 }, 48 { 49 name: "byte slice", 50 addr: 0x50, 51 writeData: &[]ByteSlice{[]byte("Hello")}[0], 52 readData: &[]ByteSlice{make([]byte, 5)}[0], 53 }, 54 } 55 56 func TestIO(t *testing.T) { 57 for _, tt := range tests { 58 t.Run(fmt.Sprintf(tt.name), func(t *testing.T) { 59 tmpFile, err := ioutil.TempFile("", "io_test") 60 if err != nil { 61 t.Fatal(err) 62 } 63 tmpFile.Write(make([]byte, 10000)) 64 tmpFile.Close() 65 defer os.Remove(tmpFile.Name()) 66 memPath = tmpFile.Name() 67 defer func() { memPath = "/dev/mem" }() 68 69 // Write to the file. 70 if err := Write(tt.addr, tt.writeData); err != nil { 71 if err.Error() == tt.err { 72 return 73 } 74 t.Fatal(err) 75 } 76 77 // Read back the value. 78 if err := Read(tt.addr, tt.readData); err != nil { 79 if err.Error() == tt.err { 80 return 81 } 82 t.Fatal(err) 83 } 84 85 want := tt.writeData 86 got := tt.readData 87 if !reflect.DeepEqual(want, got) { 88 t.Fatalf("Write(%#016x, %v) = %v; want %v", 89 tt.addr, want, got, want) 90 } 91 }) 92 } 93 } 94 95 func ExampleRead() { 96 var data Uint32 97 if err := Read(0x1000000, &data); err != nil { 98 log.Fatal(err) 99 } 100 log.Printf("%v\n", data) 101 } 102 103 func ExampleWrite() { 104 data := Uint32(42) 105 if err := Write(0x1000000, &data); err != nil { 106 log.Fatal(err) 107 } 108 }