Repository: incubator-htrace
Updated Branches:
  refs/heads/master 4b492b241 -> cec039de5


HTRACE-99. log.go fails to create new log files (cmccabe)


Project: http://git-wip-us.apache.org/repos/asf/incubator-htrace/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-htrace/commit/cec039de
Tree: http://git-wip-us.apache.org/repos/asf/incubator-htrace/tree/cec039de
Diff: http://git-wip-us.apache.org/repos/asf/incubator-htrace/diff/cec039de

Branch: refs/heads/master
Commit: cec039de59fd571ac7ac7fe93683746891e04468
Parents: 4b492b2
Author: Colin P. Mccabe <[email protected]>
Authored: Fri Jan 30 15:07:37 2015 -0800
Committer: Colin P. Mccabe <[email protected]>
Committed: Fri Jan 30 15:07:37 2015 -0800

----------------------------------------------------------------------
 .../src/go/src/org/apache/htrace/common/log.go  |   2 +-
 .../go/src/org/apache/htrace/common/log_test.go | 122 +++++++++++++++++++
 2 files changed, 123 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-htrace/blob/cec039de/htrace-core/src/go/src/org/apache/htrace/common/log.go
----------------------------------------------------------------------
diff --git a/htrace-core/src/go/src/org/apache/htrace/common/log.go 
b/htrace-core/src/go/src/org/apache/htrace/common/log.go
index 31faea4..5ced1be 100644
--- a/htrace-core/src/go/src/org/apache/htrace/common/log.go
+++ b/htrace-core/src/go/src/org/apache/htrace/common/log.go
@@ -104,7 +104,7 @@ func (path logPath) Open() *logSink {
        if path == STDOUT_LOG_PATH {
                return &logSink{path: path, file: os.Stdout}
        }
-       file, err := os.OpenFile(string(path), os.O_WRONLY|os.O_APPEND, 0777)
+       file, err := os.OpenFile(string(path), 
os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0777)
        if err != nil {
                sink := &logSink{path: STDOUT_LOG_PATH, file: os.Stdout}
                fmt.Fprintf(os.Stderr, "Failed to open log file %s: %s\n",

http://git-wip-us.apache.org/repos/asf/incubator-htrace/blob/cec039de/htrace-core/src/go/src/org/apache/htrace/common/log_test.go
----------------------------------------------------------------------
diff --git a/htrace-core/src/go/src/org/apache/htrace/common/log_test.go 
b/htrace-core/src/go/src/org/apache/htrace/common/log_test.go
new file mode 100644
index 0000000..64d6a3f
--- /dev/null
+++ b/htrace-core/src/go/src/org/apache/htrace/common/log_test.go
@@ -0,0 +1,122 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package common
+
+import (
+       "bufio"
+       "fmt"
+       "io"
+       "io/ioutil"
+       "org/apache/htrace/conf"
+       "os"
+       "strings"
+       "testing"
+)
+
+func newLogger(faculty string, args ...string) *Logger {
+       cnfBld := conf.Builder{Defaults: conf.DEFAULTS}
+       cnf, err := cnfBld.Build()
+       if err != nil {
+               panic(fmt.Sprintf("failed to create conf: %s", err.Error()))
+       }
+       cnf2 := cnf.Clone(args...)
+       lg := NewLogger(faculty, cnf2)
+       return lg
+}
+
+func TestNewLogger(t *testing.T) {
+       lg := newLogger("foo", "log.level", "TRACE")
+       lg.Close()
+}
+
+func verifyLines(t *testing.T, rdr io.Reader, lines []string) {
+       scanner := bufio.NewScanner(rdr)
+       lineIdx := 0
+       for scanner.Scan() {
+               line := scanner.Text()
+               if !strings.Contains(line, lines[lineIdx]) {
+                       t.Fatalf("Error on line %d: didn't find substring '%s' 
in line '%s'\n",
+                                       (lineIdx + 1), lines[lineIdx], line)
+               }
+               lineIdx++
+       }
+       if err := scanner.Err(); err != nil {
+               t.Fatal(err.Error())
+       }
+}
+
+func TestFileLogs(t *testing.T) {
+       tempDir, err := ioutil.TempDir(os.TempDir(), "testFileLogs")
+       if err != nil {
+               panic(fmt.Sprintf("error creating tempdir: %s\n", err.Error()))
+       }
+       defer os.RemoveAll(tempDir)
+       logPath := tempDir + conf.PATH_SEP + "log"
+       lg := newLogger("foo", "log.level", "DEBUG",
+               "foo.log.level", "INFO",
+               "log.path", logPath)
+       lg.Tracef("Non-important stuff, ignore this.\n")
+       lg.Infof("problem with the foobar\n")
+       lg.Tracef("More non-important stuff, also ignore this.\n")
+       lg.Infof("and another problem with the foobar\n")
+       logFile, err := os.Open(logPath)
+       if err != nil {
+               t.Fatalf("failed to open file %s: %s\n", logPath, err.Error())
+       }
+       verifyLines(t, logFile, []string {
+               "problem with the foobar",
+               "and another problem with the foobar",
+       })
+       logFile.Close()
+       lg.Close()
+}
+
+func TestMultipleFileLogs(t *testing.T) {
+       tempDir, err := ioutil.TempDir(os.TempDir(), "testMultipleFileLogs")
+       if err != nil {
+               panic(fmt.Sprintf("error creating tempdir: %s\n", err.Error()))
+       }
+       defer os.RemoveAll(tempDir)
+       logPath := tempDir + conf.PATH_SEP + "log"
+       fooLg := newLogger("foo", "log.level", "DEBUG",
+               "foo.log.level", "INFO",
+               "log.path", logPath)
+       fooLg.Infof("The foo needs maintenance.\n")
+       barLg := newLogger("bar", "log.level", "DEBUG",
+               "foo.log.level", "INFO",
+               "log.path", logPath)
+       barLg.Debugf("The bar is open\n")
+       fooLg.Errorf("Fizz buzz\n")
+       logFile, err := os.Open(logPath)
+       if err != nil {
+               t.Fatalf("failed to open file %s: %s\n", logPath, err.Error())
+       }
+       fooLg.Tracef("Fizz buzz2\n")
+       barLg.Tracef("Fizz buzz3\n")
+       verifyLines(t, logFile, []string {
+               "The foo needs maintenance.",
+               "The bar is open",
+               "Fizz buzz",
+               "Fizz buzz3",
+       })
+       logFile.Close()
+       fooLg.Close()
+       barLg.Close()
+}

Reply via email to