pulumi/pkg/compiler/compiler_test.go
joeduffy 6f99088e2b Add scaffolding for the AWS ECS scheduler backend
Right now, the AWS ECS scheduler simply passes through to the underlying
AWS cloud provider.  However, now we have the necessary hooks to start
incrementally recognizing stack types and emitting specialized code for
them (e.g., starting with mu/container).
2016-11-22 12:37:14 -08:00

103 lines
3.4 KiB
Go

// Copyright 2016 Marapongo, Inc. All rights reserved.
package compiler
import (
"fmt"
"testing"
"github.com/stretchr/testify/assert"
"github.com/marapongo/mu/pkg/compiler/backends"
"github.com/marapongo/mu/pkg/compiler/backends/clouds"
"github.com/marapongo/mu/pkg/diag"
"github.com/marapongo/mu/pkg/errors"
)
func TestBadMissingMufile(t *testing.T) {
sink := buildNoCodegen("testdata", "compiler", "bad__missing_mufile")
// Check that the compiler complained about a missing Mufile.
d := errors.MissingMufile
assert.Equal(t, 1, sink.Errors(), "expected a single error")
assert.Equal(t,
fmt.Sprintf("%v: %v%v: %v\n",
diag.DefaultSinkErrorPrefix, diag.DefaultSinkIDPrefix, d.ID, fmt.Sprintf(d.Message, sink.Pwd)),
sink.ErrorMsgs()[0])
}
func TestBadMufileCasing(t *testing.T) {
sink := buildNoCodegen("testdata", "compiler", "bad__mufile_casing")
// Check that the compiler warned about a bad Mufile casing (mu.yaml).
d := errors.WarnIllegalMufileCasing
assert.Equal(t, 1, sink.Warnings(), "expected a single warning")
assert.Equal(t,
fmt.Sprintf("%v: %v%v: %v: %v\n",
diag.DefaultSinkWarningPrefix, diag.DefaultSinkIDPrefix, d.ID, "mu.yaml", d.Message),
sink.WarningMsgs()[0])
}
func TestBadMufileExt1(t *testing.T) {
sink := buildNoCodegen("testdata", "compiler", "bad__mufile_ext__1")
// Check that the compiler warned about a bad Mufile extension (none).
d := errors.WarnIllegalMufileExt
assert.Equal(t, 1, sink.Warnings(), "expected a single warning")
assert.Equal(t,
fmt.Sprintf("%v: %v%v: %v: %v\n",
diag.DefaultSinkWarningPrefix, diag.DefaultSinkIDPrefix, d.ID, "Mu", fmt.Sprintf(d.Message, "")),
sink.WarningMsgs()[0])
}
func TestBadMufileExt2(t *testing.T) {
sink := buildNoCodegen("testdata", "compiler", "bad__mufile_ext__2")
// Check that the compiler warned about a bad Mufile extension (".txt").
d := errors.WarnIllegalMufileExt
assert.Equal(t, 1, sink.Warnings(), "expected a single warning")
assert.Equal(t,
fmt.Sprintf("%v: %v%v: %v: %v\n",
diag.DefaultSinkWarningPrefix, diag.DefaultSinkIDPrefix, d.ID, "Mu.txt", fmt.Sprintf(d.Message, ".txt")),
sink.WarningMsgs()[0])
}
func TestMissingTarget(t *testing.T) {
mufile := []byte("name: notarget\n" +
"abstract: true\n")
// Check that the compiler issued an error due to missing cloud targets.
sink := buildFile(Options{}, mufile, ".yaml")
d := errors.MissingTarget
assert.Equal(t, 1, sink.Errors(), "expected a single error")
assert.Equal(t,
fmt.Sprintf("%v: %v%v: %v: %v\n",
diag.DefaultSinkErrorPrefix, diag.DefaultSinkIDPrefix, d.ID, "Mu.yaml", d.Message),
sink.ErrorMsgs()[0])
// Now check that this same project compiles fine if we manually specify an architecture.
sink = buildFile(Options{
Arch: backends.Arch{
Cloud: clouds.AWS,
},
}, mufile, ".yaml")
assert.Equal(t, 0, sink.Errors(), "expected no compilation errors")
}
func TestUnrecognizedCloud(t *testing.T) {
mufile := []byte("name: notarget\n" +
"abstract: true\n" +
"clusters:\n" +
" prod:\n" +
" default: true\n" +
" cloud: badcloud\n")
// Check that the compiler issued an error due to an unrecognized cloud.
sink := buildFile(Options{}, mufile, ".yaml")
d := errors.UnrecognizedCloudArch
assert.Equal(t, 1, sink.Errors(), "expected a single error")
assert.Equal(t,
fmt.Sprintf("%v: %v%v: %v: %v\n",
diag.DefaultSinkErrorPrefix, diag.DefaultSinkIDPrefix, d.ID, "Mu.yaml",
fmt.Sprintf(d.Message, "badcloud")),
sink.ErrorMsgs()[0])
}