github.com/richardbowden/terraform@v0.6.12-0.20160901200758-30ea22c25211/command/validate_test.go (about)

     1  package command
     2  
     3  import (
     4  	"strings"
     5  	"testing"
     6  
     7  	"github.com/mitchellh/cli"
     8  )
     9  
    10  func setupTest(fixturepath string) (*cli.MockUi, int) {
    11  	ui := new(cli.MockUi)
    12  	c := &ValidateCommand{
    13  		Meta: Meta{
    14  			Ui: ui,
    15  		},
    16  	}
    17  
    18  	args := []string{
    19  		testFixturePath(fixturepath),
    20  	}
    21  
    22  	code := c.Run(args)
    23  	return ui, code
    24  }
    25  func TestValidateCommand(t *testing.T) {
    26  	if ui, code := setupTest("validate-valid"); code != 0 {
    27  		t.Fatalf("bad: %d\n\n%s", code, ui.ErrorWriter.String())
    28  	}
    29  }
    30  
    31  func TestValidateFailingCommand(t *testing.T) {
    32  	if ui, code := setupTest("validate-invalid"); code != 1 {
    33  		t.Fatalf("Should have failed: %d\n\n%s", code, ui.ErrorWriter.String())
    34  	}
    35  }
    36  
    37  func TestValidateFailingCommandMissingQuote(t *testing.T) {
    38  	ui, code := setupTest("validate-invalid/missing_quote")
    39  
    40  	if code != 1 {
    41  		t.Fatalf("Should have failed: %d\n\n%s", code, ui.ErrorWriter.String())
    42  	}
    43  	if !strings.HasSuffix(strings.TrimSpace(ui.ErrorWriter.String()), "IDENT test") {
    44  		t.Fatalf("Should have failed: %d\n\n'%s'", code, ui.ErrorWriter.String())
    45  	}
    46  }
    47  
    48  func TestValidateFailingCommandMissingVariable(t *testing.T) {
    49  	ui, code := setupTest("validate-invalid/missing_var")
    50  	if code != 1 {
    51  		t.Fatalf("Should have failed: %d\n\n%s", code, ui.ErrorWriter.String())
    52  	}
    53  	if !strings.HasSuffix(strings.TrimSpace(ui.ErrorWriter.String()), "config: unknown variable referenced: 'description'. define it with 'variable' blocks") {
    54  		t.Fatalf("Should have failed: %d\n\n'%s'", code, ui.ErrorWriter.String())
    55  	}
    56  }
    57  
    58  func TestSameProviderMutipleTimesShouldFail(t *testing.T) {
    59  	ui, code := setupTest("validate-invalid/multiple_providers")
    60  	if code != 1 {
    61  		t.Fatalf("Should have failed: %d\n\n%s", code, ui.ErrorWriter.String())
    62  	}
    63  	if !strings.HasSuffix(strings.TrimSpace(ui.ErrorWriter.String()), "provider.aws: declared multiple times, you can only declare a provider once") {
    64  		t.Fatalf("Should have failed: %d\n\n'%s'", code, ui.ErrorWriter.String())
    65  	}
    66  }
    67  
    68  func TestSameModuleMultipleTimesShouldFail(t *testing.T) {
    69  	ui, code := setupTest("validate-invalid/multiple_modules")
    70  	if code != 1 {
    71  		t.Fatalf("Should have failed: %d\n\n%s", code, ui.ErrorWriter.String())
    72  	}
    73  	if !strings.HasSuffix(strings.TrimSpace(ui.ErrorWriter.String()), "multi_module: module repeated multiple times") {
    74  		t.Fatalf("Should have failed: %d\n\n'%s'", code, ui.ErrorWriter.String())
    75  	}
    76  }
    77  
    78  func TestSameResourceMultipleTimesShouldFail(t *testing.T) {
    79  	ui, code := setupTest("validate-invalid/multiple_resources")
    80  	if code != 1 {
    81  		t.Fatalf("Should have failed: %d\n\n%s", code, ui.ErrorWriter.String())
    82  	}
    83  	if !strings.HasSuffix(strings.TrimSpace(ui.ErrorWriter.String()), "aws_instance.web: resource repeated multiple times") {
    84  		t.Fatalf("Should have failed: %d\n\n'%s'", code, ui.ErrorWriter.String())
    85  	}
    86  }
    87  
    88  func TestOutputWithoutValueShouldFail(t *testing.T) {
    89  	ui, code := setupTest("validate-invalid/outputs")
    90  	if code != 1 {
    91  		t.Fatalf("Should have failed: %d\n\n%s", code, ui.ErrorWriter.String())
    92  	}
    93  	if !strings.HasSuffix(strings.TrimSpace(ui.ErrorWriter.String()), "output is missing required 'value' key") {
    94  		t.Fatalf("Should have failed: %d\n\n'%s'", code, ui.ErrorWriter.String())
    95  	}
    96  }
    97  
    98  func TestModuleWithIncorrectNameShouldFail(t *testing.T) {
    99  	ui, code := setupTest("validate-invalid/incorrectmodulename")
   100  	if code != 1 {
   101  		t.Fatalf("Should have failed: %d\n\n%s", code, ui.ErrorWriter.String())
   102  	}
   103  
   104  	if !strings.Contains(ui.ErrorWriter.String(), "module name can only contain letters, numbers, dashes, and underscores") {
   105  		t.Fatalf("Should have failed: %d\n\n'%s'", code, ui.ErrorWriter.String())
   106  	}
   107  	if !strings.Contains(ui.ErrorWriter.String(), "module source cannot contain interpolations") {
   108  		t.Fatalf("Should have failed: %d\n\n'%s'", code, ui.ErrorWriter.String())
   109  	}
   110  }
   111  
   112  func TestWronglyUsedInterpolationShouldFail(t *testing.T) {
   113  	ui, code := setupTest("validate-invalid/interpolation")
   114  	if code != 1 {
   115  		t.Fatalf("Should have failed: %d\n\n%s", code, ui.ErrorWriter.String())
   116  	}
   117  
   118  	if !strings.Contains(ui.ErrorWriter.String(), "depends on value cannot contain interpolations") {
   119  		t.Fatalf("Should have failed: %d\n\n'%s'", code, ui.ErrorWriter.String())
   120  	}
   121  	if !strings.Contains(ui.ErrorWriter.String(), "Variable 'vairable_with_interpolation': cannot contain interpolations") {
   122  		t.Fatalf("Should have failed: %d\n\n'%s'", code, ui.ErrorWriter.String())
   123  	}
   124  }