github.com/ncdc/docker@v0.10.1-0.20160129113957-6c6729ef5b74/api/client/inspect/inspector_test.go (about) 1 package inspect 2 3 import ( 4 "bytes" 5 "strings" 6 "testing" 7 "text/template" 8 ) 9 10 type testElement struct { 11 DNS string `json:"Dns"` 12 } 13 14 func TestTemplateInspectorDefault(t *testing.T) { 15 b := new(bytes.Buffer) 16 tmpl, err := template.New("test").Parse("{{.DNS}}") 17 if err != nil { 18 t.Fatal(err) 19 } 20 i := NewTemplateInspector(b, tmpl) 21 if err := i.Inspect(testElement{"0.0.0.0"}, nil); err != nil { 22 t.Fatal(err) 23 } 24 25 if err := i.Flush(); err != nil { 26 t.Fatal(err) 27 } 28 if b.String() != "0.0.0.0\n" { 29 t.Fatalf("Expected `0.0.0.0\\n`, got `%s`", b.String()) 30 } 31 } 32 33 func TestTemplateInspectorEmpty(t *testing.T) { 34 b := new(bytes.Buffer) 35 tmpl, err := template.New("test").Parse("{{.DNS}}") 36 if err != nil { 37 t.Fatal(err) 38 } 39 i := NewTemplateInspector(b, tmpl) 40 41 if err := i.Flush(); err != nil { 42 t.Fatal(err) 43 } 44 if b.String() != "\n" { 45 t.Fatalf("Expected `\\n`, got `%s`", b.String()) 46 } 47 } 48 49 func TestTemplateInspectorTemplateError(t *testing.T) { 50 b := new(bytes.Buffer) 51 tmpl, err := template.New("test").Parse("{{.Foo}}") 52 if err != nil { 53 t.Fatal(err) 54 } 55 i := NewTemplateInspector(b, tmpl) 56 57 err = i.Inspect(testElement{"0.0.0.0"}, nil) 58 if err == nil { 59 t.Fatal("Expected error got nil") 60 } 61 62 if !strings.HasPrefix(err.Error(), "Template parsing error") { 63 t.Fatalf("Expected template error, got %v", err) 64 } 65 } 66 67 func TestTemplateInspectorRawFallback(t *testing.T) { 68 b := new(bytes.Buffer) 69 tmpl, err := template.New("test").Parse("{{.Dns}}") 70 if err != nil { 71 t.Fatal(err) 72 } 73 i := NewTemplateInspector(b, tmpl) 74 if err := i.Inspect(testElement{"0.0.0.0"}, []byte(`{"Dns": "0.0.0.0"}`)); err != nil { 75 t.Fatal(err) 76 } 77 78 if err := i.Flush(); err != nil { 79 t.Fatal(err) 80 } 81 if b.String() != "0.0.0.0\n" { 82 t.Fatalf("Expected `0.0.0.0\\n`, got `%s`", b.String()) 83 } 84 } 85 86 func TestTemplateInspectorRawFallbackError(t *testing.T) { 87 b := new(bytes.Buffer) 88 tmpl, err := template.New("test").Parse("{{.Dns}}") 89 if err != nil { 90 t.Fatal(err) 91 } 92 i := NewTemplateInspector(b, tmpl) 93 err = i.Inspect(testElement{"0.0.0.0"}, []byte(`{"Foo": "0.0.0.0"}`)) 94 if err == nil { 95 t.Fatal("Expected error got nil") 96 } 97 98 if !strings.HasPrefix(err.Error(), "Template parsing error") { 99 t.Fatalf("Expected template error, got %v", err) 100 } 101 } 102 103 func TestTemplateInspectorMultiple(t *testing.T) { 104 b := new(bytes.Buffer) 105 tmpl, err := template.New("test").Parse("{{.DNS}}") 106 if err != nil { 107 t.Fatal(err) 108 } 109 i := NewTemplateInspector(b, tmpl) 110 111 if err := i.Inspect(testElement{"0.0.0.0"}, nil); err != nil { 112 t.Fatal(err) 113 } 114 if err := i.Inspect(testElement{"1.1.1.1"}, nil); err != nil { 115 t.Fatal(err) 116 } 117 118 if err := i.Flush(); err != nil { 119 t.Fatal(err) 120 } 121 if b.String() != "0.0.0.0\n1.1.1.1\n" { 122 t.Fatalf("Expected `0.0.0.0\\n1.1.1.1\\n`, got `%s`", b.String()) 123 } 124 } 125 126 func TestIndentedInspectorDefault(t *testing.T) { 127 b := new(bytes.Buffer) 128 i := NewIndentedInspector(b) 129 if err := i.Inspect(testElement{"0.0.0.0"}, nil); err != nil { 130 t.Fatal(err) 131 } 132 133 if err := i.Flush(); err != nil { 134 t.Fatal(err) 135 } 136 137 expected := `[ 138 { 139 "Dns": "0.0.0.0" 140 } 141 ] 142 ` 143 if b.String() != expected { 144 t.Fatalf("Expected `%s`, got `%s`", expected, b.String()) 145 } 146 } 147 148 func TestIndentedInspectorMultiple(t *testing.T) { 149 b := new(bytes.Buffer) 150 i := NewIndentedInspector(b) 151 if err := i.Inspect(testElement{"0.0.0.0"}, nil); err != nil { 152 t.Fatal(err) 153 } 154 155 if err := i.Inspect(testElement{"1.1.1.1"}, nil); err != nil { 156 t.Fatal(err) 157 } 158 159 if err := i.Flush(); err != nil { 160 t.Fatal(err) 161 } 162 163 expected := `[ 164 { 165 "Dns": "0.0.0.0" 166 }, 167 { 168 "Dns": "1.1.1.1" 169 } 170 ] 171 ` 172 if b.String() != expected { 173 t.Fatalf("Expected `%s`, got `%s`", expected, b.String()) 174 } 175 } 176 177 func TestIndentedInspectorEmpty(t *testing.T) { 178 b := new(bytes.Buffer) 179 i := NewIndentedInspector(b) 180 181 if err := i.Flush(); err != nil { 182 t.Fatal(err) 183 } 184 185 expected := "[]\n" 186 if b.String() != expected { 187 t.Fatalf("Expected `%s`, got `%s`", expected, b.String()) 188 } 189 } 190 191 func TestIndentedInspectorRawElements(t *testing.T) { 192 b := new(bytes.Buffer) 193 i := NewIndentedInspector(b) 194 if err := i.Inspect(testElement{"0.0.0.0"}, []byte(`{"Dns": "0.0.0.0", "Node": "0"}`)); err != nil { 195 t.Fatal(err) 196 } 197 198 if err := i.Inspect(testElement{"1.1.1.1"}, []byte(`{"Dns": "1.1.1.1", "Node": "1"}`)); err != nil { 199 t.Fatal(err) 200 } 201 202 if err := i.Flush(); err != nil { 203 t.Fatal(err) 204 } 205 206 expected := `[ 207 { 208 "Dns": "0.0.0.0", 209 "Node": "0" 210 }, 211 { 212 "Dns": "1.1.1.1", 213 "Node": "1" 214 } 215 ] 216 ` 217 if b.String() != expected { 218 t.Fatalf("Expected `%s`, got `%s`", expected, b.String()) 219 } 220 }