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