github.com/tarrant/terraform@v0.3.8-0.20150402012457-f68c9eee638e/config/module/tree_test.go (about)

     1  package module
     2  
     3  import (
     4  	"reflect"
     5  	"strings"
     6  	"testing"
     7  )
     8  
     9  func TestTreeChild(t *testing.T) {
    10  	storage := testStorage(t)
    11  	tree := NewTree("", testConfig(t, "child"))
    12  	if err := tree.Load(storage, GetModeGet); err != nil {
    13  		t.Fatalf("err: %s", err)
    14  	}
    15  
    16  	// Should be able to get the root child
    17  	if c := tree.Child([]string{}); c == nil {
    18  		t.Fatal("should not be nil")
    19  	} else if c.Name() != "root" {
    20  		t.Fatalf("bad: %#v", c.Name())
    21  	}
    22  
    23  	// Should be able to get the root child
    24  	if c := tree.Child(nil); c == nil {
    25  		t.Fatal("should not be nil")
    26  	} else if c.Name() != "root" {
    27  		t.Fatalf("bad: %#v", c.Name())
    28  	}
    29  
    30  	// Should be able to get the foo child
    31  	if c := tree.Child([]string{"foo"}); c == nil {
    32  		t.Fatal("should not be nil")
    33  	} else if c.Name() != "foo" {
    34  		t.Fatalf("bad: %#v", c.Name())
    35  	}
    36  
    37  	// Should be able to get the nested child
    38  	if c := tree.Child([]string{"foo", "bar"}); c == nil {
    39  		t.Fatal("should not be nil")
    40  	} else if c.Name() != "bar" {
    41  		t.Fatalf("bad: %#v", c.Name())
    42  	}
    43  }
    44  
    45  func TestTreeLoad(t *testing.T) {
    46  	storage := testStorage(t)
    47  	tree := NewTree("", testConfig(t, "basic"))
    48  
    49  	if tree.Loaded() {
    50  		t.Fatal("should not be loaded")
    51  	}
    52  
    53  	// This should error because we haven't gotten things yet
    54  	if err := tree.Load(storage, GetModeNone); err == nil {
    55  		t.Fatal("should error")
    56  	}
    57  
    58  	if tree.Loaded() {
    59  		t.Fatal("should not be loaded")
    60  	}
    61  
    62  	// This should get things
    63  	if err := tree.Load(storage, GetModeGet); err != nil {
    64  		t.Fatalf("err: %s", err)
    65  	}
    66  
    67  	if !tree.Loaded() {
    68  		t.Fatal("should be loaded")
    69  	}
    70  
    71  	// This should no longer error
    72  	if err := tree.Load(storage, GetModeNone); err != nil {
    73  		t.Fatalf("err: %s", err)
    74  	}
    75  
    76  	actual := strings.TrimSpace(tree.String())
    77  	expected := strings.TrimSpace(treeLoadStr)
    78  	if actual != expected {
    79  		t.Fatalf("bad: \n\n%s", actual)
    80  	}
    81  }
    82  
    83  func TestTreeLoad_duplicate(t *testing.T) {
    84  	storage := testStorage(t)
    85  	tree := NewTree("", testConfig(t, "dup"))
    86  
    87  	if tree.Loaded() {
    88  		t.Fatal("should not be loaded")
    89  	}
    90  
    91  	// This should get things
    92  	if err := tree.Load(storage, GetModeGet); err == nil {
    93  		t.Fatalf("should error")
    94  	}
    95  }
    96  
    97  func TestTreeLoad_parentRef(t *testing.T) {
    98  	storage := testStorage(t)
    99  	tree := NewTree("", testConfig(t, "basic-parent"))
   100  
   101  	if tree.Loaded() {
   102  		t.Fatal("should not be loaded")
   103  	}
   104  
   105  	// This should error because we haven't gotten things yet
   106  	if err := tree.Load(storage, GetModeNone); err == nil {
   107  		t.Fatal("should error")
   108  	}
   109  
   110  	if tree.Loaded() {
   111  		t.Fatal("should not be loaded")
   112  	}
   113  
   114  	// This should get things
   115  	if err := tree.Load(storage, GetModeGet); err != nil {
   116  		t.Fatalf("err: %s", err)
   117  	}
   118  
   119  	if !tree.Loaded() {
   120  		t.Fatal("should be loaded")
   121  	}
   122  
   123  	// This should no longer error
   124  	if err := tree.Load(storage, GetModeNone); err != nil {
   125  		t.Fatalf("err: %s", err)
   126  	}
   127  
   128  	actual := strings.TrimSpace(tree.String())
   129  	expected := strings.TrimSpace(treeLoadParentStr)
   130  	if actual != expected {
   131  		t.Fatalf("bad: \n\n%s", actual)
   132  	}
   133  }
   134  
   135  func TestTreeLoad_subdir(t *testing.T) {
   136  	storage := testStorage(t)
   137  	tree := NewTree("", testConfig(t, "basic-subdir"))
   138  
   139  	if tree.Loaded() {
   140  		t.Fatal("should not be loaded")
   141  	}
   142  
   143  	// This should error because we haven't gotten things yet
   144  	if err := tree.Load(storage, GetModeNone); err == nil {
   145  		t.Fatal("should error")
   146  	}
   147  
   148  	if tree.Loaded() {
   149  		t.Fatal("should not be loaded")
   150  	}
   151  
   152  	// This should get things
   153  	if err := tree.Load(storage, GetModeGet); err != nil {
   154  		t.Fatalf("err: %s", err)
   155  	}
   156  
   157  	if !tree.Loaded() {
   158  		t.Fatal("should be loaded")
   159  	}
   160  
   161  	// This should no longer error
   162  	if err := tree.Load(storage, GetModeNone); err != nil {
   163  		t.Fatalf("err: %s", err)
   164  	}
   165  
   166  	actual := strings.TrimSpace(tree.String())
   167  	expected := strings.TrimSpace(treeLoadSubdirStr)
   168  	if actual != expected {
   169  		t.Fatalf("bad: \n\n%s", actual)
   170  	}
   171  }
   172  
   173  func TestTreeModules(t *testing.T) {
   174  	tree := NewTree("", testConfig(t, "basic"))
   175  	actual := tree.Modules()
   176  
   177  	expected := []*Module{
   178  		&Module{Name: "foo", Source: "./foo"},
   179  	}
   180  
   181  	if !reflect.DeepEqual(actual, expected) {
   182  		t.Fatalf("bad: %#v", actual)
   183  	}
   184  }
   185  
   186  func TestTreeName(t *testing.T) {
   187  	tree := NewTree("", testConfig(t, "basic"))
   188  	actual := tree.Name()
   189  
   190  	if actual != RootName {
   191  		t.Fatalf("bad: %#v", actual)
   192  	}
   193  }
   194  
   195  func TestTreeValidate_badChild(t *testing.T) {
   196  	tree := NewTree("", testConfig(t, "validate-child-bad"))
   197  
   198  	if err := tree.Load(testStorage(t), GetModeGet); err != nil {
   199  		t.Fatalf("err: %s", err)
   200  	}
   201  
   202  	if err := tree.Validate(); err == nil {
   203  		t.Fatal("should error")
   204  	}
   205  }
   206  
   207  func TestTreeValidate_badChildOutput(t *testing.T) {
   208  	tree := NewTree("", testConfig(t, "validate-bad-output"))
   209  
   210  	if err := tree.Load(testStorage(t), GetModeGet); err != nil {
   211  		t.Fatalf("err: %s", err)
   212  	}
   213  
   214  	if err := tree.Validate(); err == nil {
   215  		t.Fatal("should error")
   216  	}
   217  }
   218  
   219  func TestTreeValidate_badChildVar(t *testing.T) {
   220  	tree := NewTree("", testConfig(t, "validate-bad-var"))
   221  
   222  	if err := tree.Load(testStorage(t), GetModeGet); err != nil {
   223  		t.Fatalf("err: %s", err)
   224  	}
   225  
   226  	if err := tree.Validate(); err == nil {
   227  		t.Fatal("should error")
   228  	}
   229  }
   230  
   231  func TestTreeValidate_badRoot(t *testing.T) {
   232  	tree := NewTree("", testConfig(t, "validate-root-bad"))
   233  
   234  	if err := tree.Load(testStorage(t), GetModeGet); err != nil {
   235  		t.Fatalf("err: %s", err)
   236  	}
   237  
   238  	if err := tree.Validate(); err == nil {
   239  		t.Fatal("should error")
   240  	}
   241  }
   242  
   243  func TestTreeValidate_good(t *testing.T) {
   244  	tree := NewTree("", testConfig(t, "validate-child-good"))
   245  
   246  	if err := tree.Load(testStorage(t), GetModeGet); err != nil {
   247  		t.Fatalf("err: %s", err)
   248  	}
   249  
   250  	if err := tree.Validate(); err != nil {
   251  		t.Fatalf("err: %s", err)
   252  	}
   253  }
   254  
   255  func TestTreeValidate_notLoaded(t *testing.T) {
   256  	tree := NewTree("", testConfig(t, "basic"))
   257  
   258  	if err := tree.Validate(); err == nil {
   259  		t.Fatal("should error")
   260  	}
   261  }
   262  
   263  func TestTreeValidate_requiredChildVar(t *testing.T) {
   264  	tree := NewTree("", testConfig(t, "validate-required-var"))
   265  
   266  	if err := tree.Load(testStorage(t), GetModeGet); err != nil {
   267  		t.Fatalf("err: %s", err)
   268  	}
   269  
   270  	if err := tree.Validate(); err == nil {
   271  		t.Fatal("should error")
   272  	}
   273  }
   274  
   275  const treeLoadStr = `
   276  root
   277    foo
   278  `
   279  
   280  const treeLoadParentStr = `
   281  root
   282    a
   283      b
   284  `
   285  const treeLoadSubdirStr = `
   286  root
   287    foo
   288      bar
   289  `