diff --git a/pkg/counter.go b/pkg/counter.go new file mode 100644 index 0000000..bcf5549 --- /dev/null +++ b/pkg/counter.go @@ -0,0 +1,31 @@ +package ldsview + +import ( + "errors" + "os" +) + +// CountEntities returns the number of entities in the input file +func (parser LdifParser) CountEntities() (count int, err error) { + Logger.Info("Opening ldif file: " + parser.filename) + dumpFile, err := os.Open(parser.filename) + if err != nil { + return + } + defer dumpFile.Close() + + Logger.Info("Finding first entity block") + entityScanner := parser.findFirstEntityBlock(dumpFile) + if entityScanner == nil { + return count, errors.New("Unable to find first entity block") + } + + for entityScanner.Scan() { + titleLine := entityScanner.Text() + if parser.isEntityTitle(titleLine) { + count++ + } + } + + return +} diff --git a/pkg/counter_test.go b/pkg/counter_test.go new file mode 100644 index 0000000..978907b --- /dev/null +++ b/pkg/counter_test.go @@ -0,0 +1,18 @@ +package ldsview + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestLdifParser_CountEntities(t *testing.T) { + a := assert.New(t) + + parser := NewLdifParser(TESTFILE) + a.NotNil(parser) + + count, err := parser.CountEntities() + a.NoError(err) + a.Equal(count, NUMENTITIES) +} diff --git a/pkg/pkg_main_test.go b/pkg/pkg_main_test.go index 065b60c..f9609e3 100644 --- a/pkg/pkg_main_test.go +++ b/pkg/pkg_main_test.go @@ -1,3 +1,4 @@ package ldsview const TESTFILE = "../testdata/test_users.ldif" +const NUMENTITIES = 3