From 349a1e00a9975048e2974012cdd51eba80df2f67 Mon Sep 17 00:00:00 2001
From: Thanabodee Charoenpiriyakij
Date: Wed, 2 Jan 2019 15:21:18 +0700
Subject: [PATCH] JUnit: create directory before creating output file
Close #554
---
reporters/junit_reporter.go | 4 ++++
reporters/junit_reporter_test.go | 18 ++++++++++++++++++
2 files changed, 22 insertions(+)
diff --git a/reporters/junit_reporter.go b/reporters/junit_reporter.go
index 2c9f3c7929..9756592706 100644
--- a/reporters/junit_reporter.go
+++ b/reporters/junit_reporter.go
@@ -13,6 +13,7 @@ import (
"fmt"
"math"
"os"
+ "path/filepath"
"strings"
"github.com/onsi/ginkgo/config"
@@ -124,6 +125,9 @@ func (reporter *JUnitReporter) SpecSuiteDidEnd(summary *types.SuiteSummary) {
reporter.suite.Time = math.Trunc(summary.RunTime.Seconds()*1000) / 1000
reporter.suite.Failures = summary.NumberOfFailedSpecs
reporter.suite.Errors = 0
+ if err := os.MkdirAll(filepath.Dir(reporter.filename), 0755); err != nil {
+ fmt.Printf("Failed to create JUnit report file: %s\n\t%s", reporter.filename, err.Error())
+ }
file, err := os.Create(reporter.filename)
if err != nil {
fmt.Printf("Failed to create JUnit report file: %s\n\t%s", reporter.filename, err.Error())
diff --git a/reporters/junit_reporter_test.go b/reporters/junit_reporter_test.go
index 9b75dc0066..fae127e088 100644
--- a/reporters/junit_reporter_test.go
+++ b/reporters/junit_reporter_test.go
@@ -4,6 +4,7 @@ import (
"encoding/xml"
"io/ioutil"
"os"
+ "path/filepath"
"time"
. "github.com/onsi/ginkgo"
@@ -255,4 +256,21 @@ var _ = Describe("JUnit Reporter", func() {
})
})
}
+
+ When("output directory doesn't exist", func() {
+ It("should create before open file", func() {
+ dir, err := ioutil.TempDir("", "not-exist")
+ Expect(err).ShouldNot(HaveOccurred())
+ defer os.RemoveAll(dir)
+
+ output := filepath.Join(dir, "not", "exist", "report.xml")
+ reporter := reporters.NewJUnitReporter(output)
+ reporter.SpecSuiteDidEnd(&types.SuiteSummary{
+ NumberOfSpecsThatWillBeRun: 1,
+ NumberOfFailedSpecs: 0,
+ RunTime: testSuiteTime,
+ })
+ Ω(output).Should(BeAnExistingFile())
+ })
+ })
})