github.com/tonto/cli@v0.0.0-20180104210444-aec958fa47db/main_test.go (about)

     1  package main
     2  
     3  import (
     4  	"bytes"
     5  	"fmt"
     6  	"io/ioutil"
     7  	"log"
     8  	"os"
     9  	"os/exec"
    10  	"path"
    11  	"strings"
    12  	"testing"
    13  )
    14  
    15  var fnTestBin string
    16  
    17  // setup
    18  func init() {
    19  	fnTestBin = path.Join(os.TempDir(), "fn-test")
    20  	res, err := exec.Command("go", "build", "-o", fnTestBin).CombinedOutput()
    21  	fmt.Println(string(res))
    22  	if err != nil {
    23  		log.Fatal(err)
    24  	}
    25  }
    26  
    27  func cdToTmp(t *testing.T) string {
    28  	tmp := os.TempDir() + "/functest"
    29  	var err error
    30  	if _, err = os.Stat(tmp); os.IsExist(err) {
    31  		err := os.RemoveAll(tmp)
    32  		if err != nil {
    33  			t.Fatal(err)
    34  		}
    35  	}
    36  	err = os.MkdirAll(tmp, 0700)
    37  	if err != nil {
    38  		t.Fatal(err)
    39  	}
    40  
    41  	if err := os.Chdir(tmp); err != nil {
    42  		t.Fatal(err)
    43  	}
    44  	return tmp
    45  }
    46  
    47  func TestMainCommands(t *testing.T) {
    48  	testCommands := []string{
    49  		"init",
    50  		"apps",
    51  		"routes",
    52  		"images",
    53  		"lambda",
    54  		"version",
    55  		"build",
    56  		"bump",
    57  		"deploy",
    58  		"run",
    59  		"push",
    60  		"logs",
    61  		"calls",
    62  		"call",
    63  	}
    64  	tmp := cdToTmp(t)
    65  	defer os.RemoveAll(tmp)
    66  
    67  	for _, cmd := range testCommands {
    68  		res, err := exec.Command(fnTestBin, strings.Split(cmd, " ")...).CombinedOutput()
    69  		if bytes.Contains(res, []byte("command not found")) {
    70  			t.Error(err)
    71  		}
    72  	}
    73  }
    74  
    75  // very simple non-failure test for java versioning on fn init
    76  func TestJavaVersioning(t *testing.T) {
    77  	testname := "TestJavaVersioning"
    78  
    79  	testdir, err := ioutil.TempDir("", testname)
    80  	if err != nil {
    81  		t.Fatalf("ERROR: Failed to make tmp test directory: err: %v", err)
    82  	}
    83  	defer os.RemoveAll(testdir)
    84  
    85  	testsub1, err := ioutil.TempDir(testdir, "8")
    86  	if err != nil {
    87  		t.Fatalf("ERROR: Failed to make tmp test directory: err: %v", err)
    88  	}
    89  	checkInit(t, testsub1, "8", fnTestBin)
    90  
    91  	testsub2, err := ioutil.TempDir(testdir, "9")
    92  	if err != nil {
    93  		t.Fatalf("ERROR: Failed to make tmp test directory: err: %v", err)
    94  	}
    95  	checkInit(t, testsub2, "9", fnTestBin)
    96  
    97  	testsub3, err := ioutil.TempDir(testdir, "noversion")
    98  	if err != nil {
    99  		t.Fatalf("ERROR: Failed to make tmp test directory: err: %v", err)
   100  	}
   101  	checkInit(t, testsub3, "", fnTestBin)
   102  }
   103  
   104  func checkInit(t *testing.T, testdir, version, bin string) {
   105  	err := os.Chdir(testdir)
   106  	if err != nil {
   107  		t.Errorf("ERROR: Failed to cd to tmp test directory: err: %v", err)
   108  	}
   109  
   110  	runtime := fmt.Sprintf("--runtime=java%s", version)
   111  
   112  	_, err = exec.Command(bin, "init", runtime).CombinedOutput()
   113  	if err != nil {
   114  		t.Errorf("ERROR: Failed to run fn init with --runtime=java%s. err: %v", version, err)
   115  	}
   116  
   117  	if _, err = os.Stat(fmt.Sprintf("%s/src/main", testdir)); err != nil && os.IsNotExist(err) {
   118  		t.Errorf("ERROR: failed to create java project with --runtime=java%s. err: %v", version, err)
   119  	}
   120  }