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  }