Skip to content

Commit

Permalink
#97 Savepoint
Browse files Browse the repository at this point in the history
  • Loading branch information
docktermj committed Jun 11, 2024
1 parent e592b57 commit e04b5ea
Show file tree
Hide file tree
Showing 40 changed files with 486 additions and 529 deletions.
49 changes: 19 additions & 30 deletions checker/checker.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,7 @@ import (
"strconv"
"time"

"github.com/senzing-garage/go-databasing/dbhelper"
"github.com/senzing-garage/go-logging/logging"
"github.com/senzing-garage/go-messaging/messenger"
"github.com/senzing-garage/go-observing/notifier"
"github.com/senzing-garage/go-observing/observer"
"github.com/senzing-garage/go-observing/subject"
Expand All @@ -21,12 +19,11 @@ import (
// Types
// ----------------------------------------------------------------------------

// CheckerImpl is the default implementation of the SqlExecutor interface.
type CheckerImpl struct {
// BasicChecker is the default implementation of the SqlExecutor interface.
type BasicChecker struct {
DatabaseConnector driver.Connector
isTrace bool
logger logging.Logging
messenger messenger.Messenger
observerOrigin string
observers subject.Subject
}
Expand All @@ -39,11 +36,11 @@ const (
// Variables
// ----------------------------------------------------------------------------

var debugOptions []interface{} = []interface{}{
var debugOptions = []interface{}{
&logging.OptionCallerSkip{Value: 5},
}

var traceOptions []interface{} = []interface{}{
var traceOptions = []interface{}{
&logging.OptionCallerSkip{Value: 5},
}

Expand All @@ -52,8 +49,8 @@ var traceOptions []interface{} = []interface{}{
// ----------------------------------------------------------------------------

// Get the Logger singleton.
func (schemaChecker *CheckerImpl) getLogger() logging.Logging {
var err error = nil
func (schemaChecker *BasicChecker) getLogger() logging.Logging {
var err error
if schemaChecker.logger == nil {
schemaChecker.logger, err = logging.NewSenzingLogger(ComponentID, IDMessages, baseCallerSkip)
if err != nil {
Expand All @@ -63,33 +60,25 @@ func (schemaChecker *CheckerImpl) getLogger() logging.Logging {
return schemaChecker.logger
}

// Get the Messenger singleton.
func (schemaChecker *CheckerImpl) getMessenger() messenger.Messenger {
if schemaChecker.messenger == nil {
schemaChecker.messenger = dbhelper.GetMessenger(ComponentID, IDMessages, baseCallerSkip)
}
return schemaChecker.messenger
}

// Log message.
func (schemaChecker *CheckerImpl) log(messageNumber int, details ...interface{}) {
func (schemaChecker *BasicChecker) log(messageNumber int, details ...interface{}) {
schemaChecker.getLogger().Log(messageNumber, details...)
}

// Debug.
func (schemaChecker *CheckerImpl) debug(messageNumber int, details ...interface{}) {
func (schemaChecker *BasicChecker) debug(messageNumber int, details ...interface{}) {
details = append(details, debugOptions...)
schemaChecker.getLogger().Log(messageNumber, details...)
}

// Trace method entry.
func (schemaChecker *CheckerImpl) traceEntry(messageNumber int, details ...interface{}) {
func (schemaChecker *BasicChecker) traceEntry(messageNumber int, details ...interface{}) {
details = append(details, traceOptions...)
schemaChecker.getLogger().Log(messageNumber, details...)
}

// Trace method exit.
func (schemaChecker *CheckerImpl) traceExit(messageNumber int, details ...interface{}) {
func (schemaChecker *BasicChecker) traceExit(messageNumber int, details ...interface{}) {
details = append(details, traceOptions...)
schemaChecker.getLogger().Log(messageNumber, details...)
}
Expand All @@ -104,7 +93,7 @@ The IsInstalled verifies that the Senzing schema has been installed.
Input
- ctx: A context to control lifecycle.
*/
func (schemaChecker *CheckerImpl) IsSchemaInstalled(ctx context.Context) (bool, error) {
func (schemaChecker *BasicChecker) IsSchemaInstalled(ctx context.Context) (bool, error) {
var (
count int
err error
Expand Down Expand Up @@ -155,7 +144,7 @@ The IsInstalled verifies that the Senzing schema has been installed.
Input
- ctx: A context to control lifecycle.
*/
func (schemaChecker *CheckerImpl) RecordCount(ctx context.Context) (int64, error) {
func (schemaChecker *BasicChecker) RecordCount(ctx context.Context) (int64, error) {
var (
count int64
err error
Expand Down Expand Up @@ -207,7 +196,7 @@ Input
- ctx: A context to control lifecycle.
- observer: The observer to be added.
*/
func (schemaChecker *CheckerImpl) RegisterObserver(ctx context.Context, observer observer.Observer) error {
func (schemaChecker *BasicChecker) RegisterObserver(ctx context.Context, observer observer.Observer) error {
var err error
if schemaChecker.isTrace {
entryTime := time.Now()
Expand Down Expand Up @@ -236,7 +225,7 @@ Input
- ctx: A context to control lifecycle.
- logLevel: The desired log level. TRACE, DEBUG, INFO, WARN, ERROR, FATAL or PANIC.
*/
func (schemaChecker *CheckerImpl) SetLogLevel(ctx context.Context, logLevelName string) error {
func (schemaChecker *BasicChecker) SetLogLevel(ctx context.Context, logLevelName string) error {
var err error
if schemaChecker.isTrace {
entryTime := time.Now()
Expand Down Expand Up @@ -270,8 +259,8 @@ Input
- ctx: A context to control lifecycle.
- origin: The value sent in the Observer's "origin" key/value pair.
*/
func (schemaChecker *CheckerImpl) SetObserverOrigin(ctx context.Context, origin string) {
var err error = nil
func (schemaChecker *BasicChecker) SetObserverOrigin(ctx context.Context, origin string) {
var err error

// Prolog.

Expand Down Expand Up @@ -299,12 +288,12 @@ func (schemaChecker *CheckerImpl) SetObserverOrigin(ctx context.Context, origin

// If DEBUG, log input parameters. Must be done after establishing DEBUG and TRACE logging.

asJson, err := json.Marshal(schemaChecker)
asJSON, err := json.Marshal(schemaChecker)

Check failure on line 291 in checker/checker.go

View workflow job for this annotation

GitHub Actions / lint

the given struct should be annotated with the `json` tag
if err != nil {
traceExitMessageNumber, debugMessageNumber = 61, 1061
return
}
schemaChecker.log(1004, schemaChecker, string(asJson))
schemaChecker.log(1004, schemaChecker, string(asJSON))
}

// Set origin.
Expand All @@ -331,7 +320,7 @@ Input
- ctx: A context to control lifecycle.
- observer: The observer to be added.
*/
func (schemaChecker *CheckerImpl) UnregisterObserver(ctx context.Context, observer observer.Observer) error {
func (schemaChecker *BasicChecker) UnregisterObserver(ctx context.Context, observer observer.Observer) error {
var err error
if schemaChecker.isTrace {
entryTime := time.Now()
Expand Down
2 changes: 1 addition & 1 deletion checker/checker_darwin_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@
package checker

var sqliteDatabaseFilename = "/tmp/sqlite/G2C.db"
var sqliteDatabaseUrl = "sqlite3://na:na@/tmp/sqlite/G2C.db"
var sqliteDatabaseURL = "sqlite3://na:na@/tmp/sqlite/G2C.db"
17 changes: 11 additions & 6 deletions checker/checker_examples_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,21 +9,26 @@ import (
"github.com/senzing-garage/go-databasing/connector"
)

func printErr(err error) {
if err != nil {
fmt.Println(err)
}
}

// ----------------------------------------------------------------------------
// Examples for godoc documentation
// ----------------------------------------------------------------------------

func ExampleCheckerImpl_IsSchemaInstalled() {
func ExampleBasicChecker_IsSchemaInstalled() {
// For more information, visit https://github.com/senzing-garage/go-databasing/blob/main/checker/checker_examples_test.go
ctx := context.TODO()
databaseConnector, err := connector.NewConnector(ctx, sqliteDatabaseUrl)
if err != nil {
fmt.Println(err)
}
testObject := &CheckerImpl{
databaseConnector, err := connector.NewConnector(ctx, sqliteDatabaseURL)
printErr(err)
testObject := &BasicChecker{
DatabaseConnector: databaseConnector,
}
isSchemaInstalled, err := testObject.IsSchemaInstalled(ctx)
printErr(err)
fmt.Printf("isSchemaInstalled: %t", isSchemaInstalled)
// Output: isSchemaInstalled: false
}
2 changes: 1 addition & 1 deletion checker/checker_linux_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@
package checker

var sqliteDatabaseFilename = "/tmp/sqlite/G2C.db"
var sqliteDatabaseUrl = "sqlite3://na:na@/tmp/sqlite/G2C.db"
var sqliteDatabaseURL = "sqlite3://na:na@/tmp/sqlite/G2C.db"
66 changes: 22 additions & 44 deletions checker/checker_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import (

"github.com/senzing-garage/go-databasing/connector"
"github.com/senzing-garage/go-databasing/sqlexecutor"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)

// ----------------------------------------------------------------------------
Expand All @@ -30,12 +30,12 @@ func TestMain(m *testing.M) {
}

func setup() error {
var err error = nil
var err error
return err
}

func teardown() error {
var err error = nil
var err error
return err
}

Expand All @@ -60,66 +60,44 @@ func refreshSqliteDatabase(databaseFilename string) error {
// Test interface functions
// ----------------------------------------------------------------------------

func TestCheckerImpl_IsSchemaInstalled_True(test *testing.T) {
func TestBasicChecker_IsSchemaInstalled_True(test *testing.T) {
ctx := context.TODO()

// Make a fresh database and create Senzing schema.

sqlFilename := "../testdata/sqlite/g2core-schema-sqlite-create.sql"
refreshSqliteDatabase(sqliteDatabaseFilename)
databaseConnector, err := connector.NewConnector(ctx, sqliteDatabaseUrl)
if err != nil {
test.Error(err)
}
sqlExecutor := &sqlexecutor.SqlExecutorImpl{
err := refreshSqliteDatabase(sqliteDatabaseFilename)
require.NoError(test, err)
databaseConnector, err := connector.NewConnector(ctx, sqliteDatabaseURL)
require.NoError(test, err)
sqlExecutor := &sqlexecutor.BasicSQLExecutor{
DatabaseConnector: databaseConnector,
}
sqlExecutor.ProcessFileName(ctx, sqlFilename)
err = sqlExecutor.ProcessFileName(ctx, sqlFilename)
require.NoError(test, err)

// Perform test.

testObject := &CheckerImpl{
testObject := &BasicChecker{
DatabaseConnector: databaseConnector,
}
isSchemaInstalled, err := testObject.IsSchemaInstalled(ctx)
if isSchemaInstalled {
if err != nil {
assert.FailNow(test, err.Error())
}
require.NoError(test, err)
} else {
if err == nil {
assert.FailNow(test, "An error should have been returned")
}
require.Error(test, err, "An error should have been returned")
}
}

func TestCheckerImpl_IsSchemaInstalled_False(test *testing.T) {
func TestBasicChecker_IsSchemaInstalled_False(test *testing.T) {
ctx := context.TODO()

// Make a fresh database with no Senzing schema.

refreshSqliteDatabase(sqliteDatabaseFilename)

// Test.

databaseConnector, err := connector.NewConnector(ctx, sqliteDatabaseUrl)
if err != nil {
test.Error(err)
}
testObject := &CheckerImpl{
err := refreshSqliteDatabase(sqliteDatabaseFilename)
require.NoError(test, err)
databaseConnector, err := connector.NewConnector(ctx, sqliteDatabaseURL)
require.NoError(test, err)
testObject := &BasicChecker{
DatabaseConnector: databaseConnector,
}
isSchemaInstalled, err := testObject.IsSchemaInstalled(ctx)
if isSchemaInstalled {
if err != nil {
assert.FailNow(test, err.Error())
} else {
assert.FailNow(test, "Schema is not installed")
}
} else {
if err == nil {
assert.FailNow(test, "Error should have been returned")
}
}

_, err = testObject.IsSchemaInstalled(ctx)
require.Error(test, err, "An error should have been returned")
}
2 changes: 1 addition & 1 deletion checker/checker_windows_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@
package checker

var sqliteDatabaseFilename = `C:\Temp\sqlite\G2C.db`
var sqliteDatabaseUrl = `sqlite3://na:na@nowhere/C:\Temp\sqlite\G2C.db`
var sqliteDatabaseURL = `sqlite3://na:na@nowhere/C:\Temp\sqlite\G2C.db`
2 changes: 1 addition & 1 deletion checker/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,4 +50,4 @@ var IDMessages = map[int]string{
}

// Status strings for specific messages.
var IdStatuses = map[int]string{}
var IDStatuses = map[int]string{}
Loading

0 comments on commit e04b5ea

Please sign in to comment.