mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-11 18:16:24 +05:00
Coverage tests in loaders
This commit is contained in:
committed by
Dan Christian Bogos
parent
32e9a44273
commit
56dced241a
@@ -57,6 +57,11 @@ var (
|
||||
testLoaderMoveFiles,
|
||||
testLoaderMoveFilesMatchingFiles,
|
||||
testLoaderMoveFilesRenameError,
|
||||
testProcessFile,
|
||||
testProcessFileLockFolder,
|
||||
testProcessFileUnableToOpen,
|
||||
testProcessFileRenameError,
|
||||
testAllFilesPresentEmptyCSV,
|
||||
testLoaderLoadAttributes,
|
||||
testLoaderVerifyOutDir,
|
||||
testLoaderCheckAttributes,
|
||||
@@ -729,3 +734,248 @@ func testLoaderMoveFilesRenameError(t *testing.T) {
|
||||
t.Error(err)
|
||||
}
|
||||
}
|
||||
|
||||
func testProcessFile(t *testing.T) {
|
||||
flPath := "/tmp/testProcessFile"
|
||||
if err := os.MkdirAll(flPath, 0777); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
file, err := os.Create(path.Join(flPath, utils.ResourcesCsv))
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
file.Write([]byte(`
|
||||
#Tenant[0],ID[1]
|
||||
cgrates.org,NewRes1
|
||||
`))
|
||||
file.Close()
|
||||
|
||||
data := engine.NewInternalDB(nil, nil, true)
|
||||
ldr := &Loader{
|
||||
ldrID: "testProcessFile",
|
||||
dm: engine.NewDataManager(data, config.CgrConfig().CacheCfg(), nil),
|
||||
fieldSep: utils.FIELDS_SEP,
|
||||
tpInDir: flPath,
|
||||
tpOutDir: "/tmp",
|
||||
lockFilename: utils.ResourcesCsv,
|
||||
bufLoaderData: make(map[string][]LoaderData),
|
||||
timezone: "UTC",
|
||||
}
|
||||
ldr.dataTpls = map[string][]*config.FCTemplate{
|
||||
utils.MetaResources: {
|
||||
{Tag: "Tenant",
|
||||
Path: "Tenant",
|
||||
Type: utils.META_COMPOSED,
|
||||
Value: config.NewRSRParsersMustCompile("~*req.0", utils.INFIELD_SEP),
|
||||
Mandatory: true},
|
||||
{Tag: "ID",
|
||||
Path: "ID",
|
||||
Type: utils.META_COMPOSED,
|
||||
Value: config.NewRSRParsersMustCompile("~*req.1", utils.INFIELD_SEP),
|
||||
Mandatory: true},
|
||||
},
|
||||
}
|
||||
|
||||
//loader file is empty (loaderType will be empty)
|
||||
if err := ldr.processFile("unusedValue", utils.ResourcesCsv); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
resCsv := `
|
||||
#Tenant[0],ID[1]
|
||||
cgrates.org,NewRes1
|
||||
`
|
||||
rdr := ioutil.NopCloser(strings.NewReader(resCsv))
|
||||
|
||||
ldr.rdrs = map[string]map[string]*openedCSVFile{
|
||||
utils.MetaResources: {
|
||||
utils.ResourcesCsv: &openedCSVFile{
|
||||
fileName: utils.ResourcesCsv,
|
||||
rdr: rdr,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
expRes := &engine.ResourceProfile{
|
||||
Tenant: "cgrates.org",
|
||||
ID: "NewRes1",
|
||||
FilterIDs: []string{},
|
||||
ThresholdIDs: []string{},
|
||||
}
|
||||
|
||||
//successfully processed the file
|
||||
if err := ldr.processFile("unusedValue", utils.ResourcesCsv); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
//get ResourceProfile and compare
|
||||
if rcv, err := ldr.dm.GetResourceProfile(expRes.Tenant, expRes.ID, true, true, utils.NonTransactional); err != nil {
|
||||
t.Error(err)
|
||||
} else if !reflect.DeepEqual(rcv, expRes) {
|
||||
t.Errorf("Expected %+v, received %+v", utils.ToJSON(expRes), utils.ToJSON(rcv))
|
||||
}
|
||||
|
||||
if err := ldr.dm.RemoveResourceProfile(expRes.Tenant, expRes.ID, utils.NonTransactional, true); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
//cannot move file when tpOutDir is empty
|
||||
ldr.tpOutDir = utils.EmptyString
|
||||
if err := ldr.processFile("unusedValue", utils.ResourcesCsv); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
if err := os.Remove(path.Join("/tmp", utils.ResourcesCsv)); err != nil {
|
||||
t.Error(err)
|
||||
} else if err := os.Remove(flPath); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
}
|
||||
|
||||
func testProcessFileLockFolder(t *testing.T) {
|
||||
flPath := "/tmp/testProcessFileLockFolder"
|
||||
if err := os.MkdirAll(flPath, 0777); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
_, err := os.Create(path.Join(flPath, utils.ResourcesCsv))
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
ldr := &Loader{
|
||||
ldrID: "testProcessFileLockFolder",
|
||||
tpInDir: flPath,
|
||||
tpOutDir: "/tmp",
|
||||
}
|
||||
|
||||
ldr.rdrs = map[string]map[string]*openedCSVFile{
|
||||
utils.MetaResources: {
|
||||
utils.ResourcesCsv: &openedCSVFile{
|
||||
fileName: utils.ResourcesCsv,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
//unable to lock the folder, because lockFileName is missing
|
||||
expected := "open /tmp/testProcessFileLockFolder: is a directory"
|
||||
if err := ldr.processFile("unusedValue", utils.ResourcesCsv); err == nil || err.Error() != expected {
|
||||
t.Errorf("Expected %+v, received %+v", expected, err)
|
||||
}
|
||||
|
||||
if err := os.Remove(path.Join(flPath, utils.ResourcesCsv)); err != nil {
|
||||
t.Error(err)
|
||||
} else if err := os.Remove(flPath); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
}
|
||||
|
||||
func testProcessFileUnableToOpen(t *testing.T) {
|
||||
flPath := "/tmp/testProcessFileUnableToOpen"
|
||||
if err := os.MkdirAll(flPath, 0777); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
ldr := &Loader{
|
||||
ldrID: "testProcessFile",
|
||||
tpInDir: flPath,
|
||||
fieldSep: ",",
|
||||
lockFilename: utils.MetaResources,
|
||||
}
|
||||
resCsv := `
|
||||
#Tenant[0],ID[1]
|
||||
cgrates.org,NewRes1
|
||||
`
|
||||
rdr := ioutil.NopCloser(strings.NewReader(resCsv))
|
||||
|
||||
ldr.rdrs = map[string]map[string]*openedCSVFile{
|
||||
utils.MetaResources: {
|
||||
`resources`: &openedCSVFile{
|
||||
fileName: utils.ResourcesCsv,
|
||||
rdr: rdr,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
//unable to lock the folder, because lockFileName is missing
|
||||
expected := "open /tmp/testProcessFileUnableToOpen/resources: no such file or directory"
|
||||
if err := ldr.processFile("unusedValue", `resources`); err == nil || err.Error() != expected {
|
||||
t.Errorf("Expected %+v, received %+v", expected, err)
|
||||
}
|
||||
|
||||
if err := os.Remove(flPath); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
}
|
||||
|
||||
func testProcessFileRenameError(t *testing.T) {
|
||||
flPath1 := "/tmp/testProcessFileLockFolder"
|
||||
if err := os.MkdirAll(flPath1, 0777); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
data := engine.NewInternalDB(nil, nil, true)
|
||||
ldr := &Loader{
|
||||
ldrID: "testProcessFileRenameError",
|
||||
dm: engine.NewDataManager(data, config.CgrConfig().CacheCfg(), nil),
|
||||
fieldSep: utils.FIELDS_SEP,
|
||||
tpInDir: flPath1,
|
||||
tpOutDir: "INEXISTING_FILE",
|
||||
lockFilename: utils.ResourcesCsv,
|
||||
bufLoaderData: make(map[string][]LoaderData),
|
||||
timezone: "UTC",
|
||||
}
|
||||
ldr.dataTpls = map[string][]*config.FCTemplate{
|
||||
utils.MetaResources: {
|
||||
{Tag: "Tenant",
|
||||
Path: "Tenant",
|
||||
Type: utils.META_COMPOSED,
|
||||
Value: config.NewRSRParsersMustCompile("~*req.0", utils.INFIELD_SEP),
|
||||
Mandatory: true},
|
||||
{Tag: "ID",
|
||||
Path: "ID",
|
||||
Type: utils.META_COMPOSED,
|
||||
Value: config.NewRSRParsersMustCompile("~*req.1", utils.INFIELD_SEP),
|
||||
Mandatory: true},
|
||||
},
|
||||
}
|
||||
|
||||
resCsv := `
|
||||
#Tenant[0],ID[1]
|
||||
cgrates.org,NewRes1
|
||||
`
|
||||
rdr := ioutil.NopCloser(strings.NewReader(resCsv))
|
||||
|
||||
ldr.rdrs = map[string]map[string]*openedCSVFile{
|
||||
utils.MetaResources: {
|
||||
utils.ResourcesCsv: &openedCSVFile{
|
||||
fileName: utils.ResourcesCsv,
|
||||
rdr: rdr,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
expected := "rename /tmp/testProcessFileLockFolder/Resources.csv INEXISTING_FILE/Resources.csv: no such file or directory"
|
||||
if err := ldr.processFile("unusedValue", utils.ResourcesCsv); err == nil || err.Error() != expected {
|
||||
t.Errorf("Expected %+v, received %+v", expected, err)
|
||||
}
|
||||
|
||||
if err := os.Remove(flPath1); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
}
|
||||
|
||||
func testAllFilesPresentEmptyCSV(t *testing.T) {
|
||||
ldr := &Loader{
|
||||
ldrID: "testProcessFileRenameError",
|
||||
lockFilename: utils.ResourcesCsv,
|
||||
bufLoaderData: make(map[string][]LoaderData),
|
||||
timezone: "UTC",
|
||||
}
|
||||
ldr.rdrs = map[string]map[string]*openedCSVFile{
|
||||
utils.MetaResources: {
|
||||
utils.ResourcesCsv: nil,
|
||||
},
|
||||
}
|
||||
if rcv := ldr.allFilesPresent(utils.MetaResources); rcv {
|
||||
t.Errorf("Expecting false")
|
||||
}
|
||||
}
|
||||
|
||||
33
loaders/loaders_test.go
Normal file
33
loaders/loaders_test.go
Normal file
@@ -0,0 +1,33 @@
|
||||
/*
|
||||
Real-time Online/Offline Charging System (OCS) for Telecom & ISP environments
|
||||
Copyright (C) ITsysCOM GmbH
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
|
||||
package loaders
|
||||
|
||||
import "testing"
|
||||
|
||||
func TestV1ReloadUnknownLoader(t *testing.T) {
|
||||
ldr := &Loader{}
|
||||
ldrs := &LoaderService{ldrs: map[string]*Loader{
|
||||
"INVALID_LOADER": ldr,
|
||||
}}
|
||||
var reply string
|
||||
expected := "UNKNOWN_LOADER: LOADER1"
|
||||
if err := ldrs.V1Load(&ArgsProcessFolder{LoaderID: "LOADER1"}, &reply); err == nil || err.Error() != expected {
|
||||
t.Errorf("Expected %+v, received %+v", expected, err)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user