github.com/stchris/docker@v1.4.2-0.20150106053530-1510a324dbd5/builder/parser/parser_test.go (about)

     1  package parser
     2  
     3  import (
     4  	"fmt"
     5  	"io/ioutil"
     6  	"os"
     7  	"path/filepath"
     8  	"testing"
     9  )
    10  
    11  const testDir = "testfiles"
    12  const negativeTestDir = "testfiles-negative"
    13  
    14  func getDirs(t *testing.T, dir string) []os.FileInfo {
    15  	f, err := os.Open(dir)
    16  	if err != nil {
    17  		t.Fatal(err)
    18  	}
    19  
    20  	defer f.Close()
    21  
    22  	dirs, err := f.Readdir(0)
    23  	if err != nil {
    24  		t.Fatal(err)
    25  	}
    26  
    27  	return dirs
    28  }
    29  
    30  func TestTestNegative(t *testing.T) {
    31  	for _, dir := range getDirs(t, negativeTestDir) {
    32  		dockerfile := filepath.Join(negativeTestDir, dir.Name(), "Dockerfile")
    33  
    34  		df, err := os.Open(dockerfile)
    35  		if err != nil {
    36  			t.Fatalf("Dockerfile missing for %s: %s", dir.Name(), err.Error())
    37  		}
    38  
    39  		_, err = Parse(df)
    40  		if err == nil {
    41  			t.Fatalf("No error parsing broken dockerfile for %s", dir.Name())
    42  		}
    43  
    44  		df.Close()
    45  	}
    46  }
    47  
    48  func TestTestData(t *testing.T) {
    49  	for _, dir := range getDirs(t, testDir) {
    50  		dockerfile := filepath.Join(testDir, dir.Name(), "Dockerfile")
    51  		resultfile := filepath.Join(testDir, dir.Name(), "result")
    52  
    53  		df, err := os.Open(dockerfile)
    54  		if err != nil {
    55  			t.Fatalf("Dockerfile missing for %s: %s", dir.Name(), err.Error())
    56  		}
    57  
    58  		rf, err := os.Open(resultfile)
    59  		if err != nil {
    60  			t.Fatalf("Result file missing for %s: %s", dir.Name(), err.Error())
    61  		}
    62  
    63  		ast, err := Parse(df)
    64  		if err != nil {
    65  			t.Fatalf("Error parsing %s's dockerfile: %s", dir.Name(), err.Error())
    66  		}
    67  
    68  		content, err := ioutil.ReadAll(rf)
    69  		if err != nil {
    70  			t.Fatalf("Error reading %s's result file: %s", dir.Name(), err.Error())
    71  		}
    72  
    73  		if ast.Dump()+"\n" != string(content) {
    74  			fmt.Fprintln(os.Stderr, "Result:\n"+ast.Dump())
    75  			fmt.Fprintln(os.Stderr, "Expected:\n"+string(content))
    76  			t.Fatalf("%s: AST dump of dockerfile does not match result", dir.Name())
    77  		}
    78  
    79  		df.Close()
    80  		rf.Close()
    81  	}
    82  }