github.com/u-root/u-root@v7.0.1-0.20200915234505-ad7babab0a8e+incompatible/pkg/namespace/builder_test.go (about) 1 // Copyright 2020 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 namespace 6 7 import ( 8 "bytes" 9 "io" 10 "io/ioutil" 11 "log" 12 "os" 13 "path" 14 "testing" 15 "time" 16 17 "github.com/gojuno/minimock" 18 "github.com/stretchr/testify/assert" 19 ) 20 21 type args struct { 22 ns Namespace 23 } 24 25 func newTestBuilder(name string) func(t minimock.Tester) *Builder { 26 return func(t minimock.Tester) *Builder { 27 wd, err := os.Getwd() 28 if err != nil { 29 t.Error(err) 30 return nil 31 } 32 f, err := os.Open("testdata/" + name) 33 if err != nil { 34 t.Error(err) 35 return nil 36 } 37 file, err := Parse(f) 38 if err != nil { 39 t.Error(err) 40 return nil 41 } 42 return &Builder{ 43 dir: wd, 44 file: file, 45 open: func(path string) (io.Reader, error) { return bytes.NewBuffer(nil), nil }, 46 } 47 } 48 } 49 func mockNSBuilder(t minimock.Tester) args { return args{&noopNS{}} } 50 func TestBuilder_buildNS(t *testing.T) { 51 52 tests := []struct { 53 name string 54 init func(t minimock.Tester) *Builder 55 inspect func(r *Builder, t *testing.T) //inspects *Builder after execution of buildNS 56 57 args func(t minimock.Tester) args 58 59 wantErr bool 60 inspectErr func(err error, t *testing.T) //use for more precise error evaluation 61 }{} 62 files, err := ioutil.ReadDir("testdata") 63 if err != nil { 64 log.Fatal(err) 65 } 66 for _, file := range files { 67 tests = append(tests, struct { 68 name string 69 init func(t minimock.Tester) *Builder 70 inspect func(r *Builder, t *testing.T) //inspects *Builder after execution of buildNS 71 72 args func(t minimock.Tester) args 73 74 wantErr bool 75 inspectErr func(err error, t *testing.T) //use for more precise error evaluation 76 }{ 77 name: file.Name(), 78 init: newTestBuilder(file.Name()), 79 args: mockNSBuilder, 80 wantErr: path.Ext(file.Name()) == ".wrong", 81 }) 82 } 83 84 for _, tt := range tests { 85 t.Run(tt.name, func(t *testing.T) { 86 mc := minimock.NewController(t) 87 defer mc.Wait(time.Second) 88 89 tArgs := tt.args(mc) 90 receiver := tt.init(mc) 91 92 err := receiver.buildNS(tArgs.ns) 93 94 if tt.inspect != nil { 95 tt.inspect(receiver, t) 96 } 97 98 if tt.wantErr { 99 if assert.Error(t, err) && tt.inspectErr != nil { 100 tt.inspectErr(err, t) 101 } 102 } else { 103 assert.NoError(t, err) 104 } 105 106 }) 107 } 108 } 109 110 type noopNS struct{} 111 112 func (m *noopNS) Bind(new string, old string, option mountflag) error { return nil } 113 func (m *noopNS) Mount(servername, old, spec string, option mountflag) error { return nil } 114 func (m *noopNS) Unmount(new string, old string) error { return nil } 115 func (m *noopNS) Import(host string, remotepath string, mountpoint string, options mountflag) error { 116 return nil 117 } 118 func (m *noopNS) Clear() error { return nil } 119 func (m *noopNS) Chdir(path string) error { return nil }