push code back with legal issues fix

Change-Id: I0fb323d1dedea5c1c219949684031430e7f7455e
Signed-off-by: ss412g <shuky.har-noy@intl.att.com>
diff --git a/E2Manager/logger/logger_test.go b/E2Manager/logger/logger_test.go
new file mode 100644
index 0000000..2c8eaf1
--- /dev/null
+++ b/E2Manager/logger/logger_test.go
@@ -0,0 +1,244 @@
+//
+// Copyright 2019 AT&T Intellectual Property
+// Copyright 2019 Nokia
+//
+// Licensed 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 logger
+
+import (
+	"bytes"
+	"github.com/stretchr/testify/assert"
+	"go.uber.org/zap"
+	"go.uber.org/zap/zapcore"
+	"io"
+	"os"
+	"testing"
+)
+
+func TestInitDebugLoggerSuccess(t *testing.T) {
+	log, err := InitLogger(DebugLevel)
+	assert.Nil(t, err)
+	assert.NotNil(t, log)
+	assert.True(t, log.Logger.Core().Enabled(zap.DebugLevel))
+}
+
+func TestInitInfoLoggerSuccess(t *testing.T) {
+	log, err := InitLogger(InfoLevel)
+	assert.Nil(t, err)
+	assert.NotNil(t, log)
+	assert.True(t, log.Logger.Core().Enabled(zap.InfoLevel))
+}
+
+func TestInitInfoLoggerFailure(t *testing.T) {
+	log, err := InitLogger(99)
+	assert.NotNil(t, err)
+	assert.Nil(t, log)
+}
+
+func TestSyncSuccess(t *testing.T){
+	logFile, err := os.Create("./loggerTest.txt")
+	if err != nil{
+		t.Errorf("logger_test.TestSyncSuccess - failed to create file, error: %s", err)
+	}
+	old := os.Stdout
+	os.Stdout = logFile
+	log, err := InitLogger(DebugLevel)
+	if err != nil {
+		t.Errorf("logger_test.TestSyncSuccess - failed to initialize logger, error: %s", err)
+	}
+	err = log.Sync()
+	assert.Nil(t, err)
+	
+	os.Stdout = old
+	logFile, err = os.Open("./loggerTest.txt")
+	if err != nil{
+		t.Errorf("logger_test.TestSyncSuccess - failed to open file, error: %s", err)
+	}
+	var buf bytes.Buffer
+	_, err = io.Copy(&buf, logFile)
+	if err != nil {
+		t.Errorf("logger_test.TestSyncSuccess - failed to copy bytes, error: %s", err)
+	}
+	debugRecord,_ :=buf.ReadString('\n')
+	errorRecord,_ :=buf.ReadString('\n')
+
+	assert.NotEmpty(t, debugRecord)
+	assert.Empty(t, errorRecord)
+	err = os.Remove("./loggerTest.txt")
+	if err != nil {
+		t.Errorf("logger_test.TestSyncSuccess - failed to remove file, error: %s", err)
+	}
+
+}
+
+func TestSyncFailure(t *testing.T){
+	log, err := InitLogger(DebugLevel)
+	err = log.Sync()
+	assert.NotNil(t, err)
+}
+
+func TestDebugEnabledFalse(t *testing.T){
+	entryNum, log := countRecords(InfoLevel, t)
+	assert.False(t, log.DebugEnabled())
+	assert.Equal(t,3, entryNum)
+}
+
+func TestDebugEnabledTrue(t *testing.T){
+	entryNum, log := countRecords(DebugLevel, t)
+	assert.True(t, log.DebugEnabled())
+	assert.Equal(t,4, entryNum)
+}
+
+func TestDPanicfDebugLevel(t *testing.T){
+	assert.True(t,validateRecordExists(DebugLevel, zap.DPanicLevel, t))
+}
+
+func TestDPanicfInfoLevel(t *testing.T){
+	assert.True(t,validateRecordExists(InfoLevel, zap.DPanicLevel, t))
+}
+
+func TestErrorfDebugLevel(t *testing.T)  {
+	assert.True(t,validateRecordExists(DebugLevel, zap.ErrorLevel, t))
+}
+
+func TestErrorfInfoLevel(t *testing.T)  {
+	assert.True(t,validateRecordExists(InfoLevel, zap.ErrorLevel, t))
+}
+
+func TestInfofDebugLevel(t *testing.T)  {
+	assert.True(t,validateRecordExists(DebugLevel, zap.InfoLevel, t))
+}
+
+func TestInfofInfoLevel(t *testing.T)  {
+	assert.True(t,validateRecordExists(InfoLevel, zap.InfoLevel, t))
+}
+
+func TestDebugfDebugLevel(t *testing.T)  {
+	assert.True(t,validateRecordExists(DebugLevel, zap.DebugLevel, t))
+}
+
+func TestDebugfInfoLevel(t *testing.T)  {
+	assert.False(t,validateRecordExists(InfoLevel, zap.DebugLevel, t))
+}
+
+func TestInfofFatalLevel(t *testing.T)  {
+	assert.False(t,validateRecordExists(FatalLevel, zap.InfoLevel, t))
+}
+
+func TestDebugfFatalLevel(t *testing.T)  {
+	assert.False(t,validateRecordExists(FatalLevel, zap.DebugLevel, t))
+}
+
+func TestLogLevelTokenToLevel(t *testing.T) {
+	level, ok := LogLevelTokenToLevel("deBug")
+	assert.True(t, ok)
+	assert.True(t, level == DebugLevel)
+
+	level, ok = LogLevelTokenToLevel("infO")
+	assert.True(t, ok)
+	assert.True(t, level == InfoLevel)
+
+	level, ok = LogLevelTokenToLevel("Warn")
+	assert.True(t, ok)
+	assert.True(t, level == WarnLevel)
+
+	level, ok = LogLevelTokenToLevel("eRror")
+	assert.True(t, ok)
+	assert.True(t, level == ErrorLevel)
+
+	level, ok = LogLevelTokenToLevel("Dpanic ")
+	assert.True(t, ok)
+	assert.True(t, level == DPanicLevel)
+
+	level, ok = LogLevelTokenToLevel("    panic ")
+	assert.True(t, ok)
+	assert.True(t, level == PanicLevel)
+
+	level, ok = LogLevelTokenToLevel("fatal")
+	assert.True(t, ok)
+	assert.True(t, level == FatalLevel)
+
+	level, ok = LogLevelTokenToLevel("zzz")
+	assert.False(t, ok)
+	assert.True(t, level > FatalLevel)
+
+}
+func countRecords(logLevel LogLevel, t *testing.T) (int, *Logger){
+	old := os.Stdout
+	r, w, _ :=os.Pipe()
+	os.Stdout = w
+	log, err := InitLogger(logLevel)
+	if err != nil {
+		t.Errorf("logger_test.TestSyncFailure - failed to initialize logger, error: %s", err)
+	}
+	log.Infof("%v, %v, %v", 1, "abc", 0.1)
+	log.Debugf("%v, %v, %v", 1, "abc", 0.1)
+	log.Errorf("%v, %v, %v", 1, "abc", 0.1)
+	log.DPanicf("%v, %v, %v", 1, "abc", 0.1)
+	err = w.Close()
+	if err != nil {
+		t.Errorf("logger_test.TestSyncFailure - failed to close writer, error: %s", err)
+	}
+	os.Stdout = old
+	var buf bytes.Buffer
+	_, err = io.Copy(&buf, r)
+	if err != nil {
+		t.Errorf("logger_test.TestSyncFailure - failed to copy bytes, error: %s", err)
+	}
+	entryNum := 0
+	s,_:= buf.ReadString('\n')
+	for len(s) > 0{
+		entryNum +=1
+		s,_= buf.ReadString('\n')
+	}
+	return entryNum, log
+}
+
+func validateRecordExists(logLevel LogLevel, recordLevel zapcore.Level, t *testing.T) bool {
+	old := os.Stdout
+	r, w, _ :=os.Pipe()
+	os.Stdout = w
+	log, err := InitLogger(logLevel)
+	if err != nil {
+		t.Errorf("logger_test.TestSyncFailure - failed to initialize logger, error: %s", err)
+	}
+	switch recordLevel{
+		case  zap.DebugLevel:
+			log.Debugf("%v, %v, %v", 1, "abc", 0.1)
+		case zap.InfoLevel:
+			log.Infof("%v, %v, %v", 1, "abc", 0.1)
+		case zap.ErrorLevel:
+			log.Errorf("%v, %v, %v", 1, "abc", 0.1)
+		case zap.DPanicLevel:
+			log.DPanicf("%v, %v, %v", 1, "abc", 0.1)
+	}
+	err = w.Close()
+	if err != nil {
+		t.Errorf("logger_test.TestSyncFailure - failed to close writer, error: %s", err)
+	}
+	os.Stdout = old
+	var buf bytes.Buffer
+	_, err = io.Copy(&buf, r)
+	if err != nil {
+		t.Errorf("logger_test.TestSyncFailure - failed to copy bytes, error: %s", err)
+	}
+	entryNum := 0
+	s,_:= buf.ReadString('\n')
+	for len(s) > 0{
+		entryNum +=1
+		s,_= buf.ReadString('\n')
+	}
+	return entryNum == 1
+}