parser_test.go 1.6 KB

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