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  }