Delete connstr in threadgdbm global channel map on close

This commit is contained in:
lash 2024-10-01 00:18:54 +01:00
parent 1b2c6933e1
commit f267aa2b41
Signed by: lash
GPG Key ID: 21D2E7BB88C2A746
3 changed files with 29 additions and 23 deletions

View File

@ -8,7 +8,6 @@ import (
"git.defalsify.org/vise.git/engine" "git.defalsify.org/vise.git/engine"
"git.defalsify.org/vise.git/logging" "git.defalsify.org/vise.git/logging"
"git.defalsify.org/vise.git/persist"
"git.defalsify.org/vise.git/resource" "git.defalsify.org/vise.git/resource"
"git.grassecon.net/urdt/ussd/internal/handlers" "git.grassecon.net/urdt/ussd/internal/handlers"
"git.grassecon.net/urdt/ussd/internal/storage" "git.grassecon.net/urdt/ussd/internal/storage"
@ -19,7 +18,7 @@ var (
scriptDir = path.Join("services", "registration") scriptDir = path.Join("services", "registration")
) )
func TestEngine(sessionId string) (engine.Engine, *persist.Persister) { func TestEngine(sessionId string) (engine.Engine, func()) {
ctx := context.Background() ctx := context.Background()
ctx = context.WithValue(ctx, "SessionId", sessionId) ctx = context.WithValue(ctx, "SessionId", sessionId)
pfp := path.Join(scriptDir, "pp.csv") pfp := path.Join(scriptDir, "pp.csv")
@ -53,7 +52,7 @@ func TestEngine(sessionId string) (engine.Engine, *persist.Persister) {
os.Exit(1) os.Exit(1)
} }
userdatastore, err := menuStorageService.GetUserdataDb(ctx) userDataStore, err := menuStorageService.GetUserdataDb(ctx)
if err != nil { if err != nil {
fmt.Fprintf(os.Stderr, err.Error()) fmt.Fprintf(os.Stderr, err.Error())
os.Exit(1) os.Exit(1)
@ -66,7 +65,7 @@ func TestEngine(sessionId string) (engine.Engine, *persist.Persister) {
} }
lhs, err := handlers.NewLocalHandlerService(pfp, true, dbResource, cfg, rs) lhs, err := handlers.NewLocalHandlerService(pfp, true, dbResource, cfg, rs)
lhs.SetDataStore(&userdatastore) lhs.SetDataStore(&userDataStore)
lhs.SetPersister(pe) lhs.SetPersister(pe)
if err != nil { if err != nil {
@ -83,7 +82,14 @@ func TestEngine(sessionId string) (engine.Engine, *persist.Persister) {
en := lhs.GetEngine() en := lhs.GetEngine()
en = en.WithFirst(hl.Init) en = en.WithFirst(hl.Init)
//en = en.WithDebug(nil) cleanFn := func() {
return en, pe err := menuStorageService.Close()
if err != nil {
logg.Errorf(err.Error())
}
logg.Infof("testengine storage closed")
}
//en = en.WithDebug(nil)
return en, cleanFn
} }

View File

@ -109,6 +109,7 @@ func(tdb *ThreadGdbmDb) Get(ctx context.Context, key []byte) ([]byte, error) {
func(tdb *ThreadGdbmDb) Close() error { func(tdb *ThreadGdbmDb) Close() error {
tdb.reserve() tdb.reserve()
close(dbC[tdb.connStr]) close(dbC[tdb.connStr])
delete(dbC, tdb.connStr)
err := tdb.db.Close() err := tdb.db.Close()
tdb.db = nil tdb.db = nil
return err return err

View File

@ -14,8 +14,8 @@ var (
) )
func TestUserRegistration(t *testing.T) { func TestUserRegistration(t *testing.T) {
en, _ := enginetest.TestEngine("session1234112") en, fn := enginetest.TestEngine("session1234112")
defer en.Finish() defer fn()
ctx := context.Background() ctx := context.Background()
sessions := testData sessions := testData
for _, session := range sessions { for _, session := range sessions {
@ -26,8 +26,7 @@ func TestUserRegistration(t *testing.T) {
cont, err := en.Exec(ctx, []byte(step.Input)) cont, err := en.Exec(ctx, []byte(step.Input))
if err != nil { if err != nil {
t.Errorf("Test case '%s' failed at input '%s': %v", group.Name, step.Input, err) t.Fatalf("Test case '%s' failed at input '%s': %v", group.Name, step.Input, err)
return
} }
if !cont { if !cont {
break break
@ -35,7 +34,7 @@ func TestUserRegistration(t *testing.T) {
w := bytes.NewBuffer(nil) w := bytes.NewBuffer(nil)
_, err = en.Flush(ctx, w) _, err = en.Flush(ctx, w)
if err != nil { if err != nil {
t.Errorf("Test case '%s' failed during Flush: %v", group.Name, err) t.Fatalf("Test case '%s' failed during Flush: %v", group.Name, err)
} }
b := w.Bytes() b := w.Bytes()
if !bytes.Equal(b, []byte(step.ExpectedContent)) { if !bytes.Equal(b, []byte(step.ExpectedContent)) {
@ -48,8 +47,8 @@ func TestUserRegistration(t *testing.T) {
} }
func TestTerms(t *testing.T) { func TestTerms(t *testing.T) {
en, _ := enginetest.TestEngine("session1234112") en, fn := enginetest.TestEngine("session1234112_a")
defer en.Finish() defer fn()
ctx := context.Background() ctx := context.Background()
sessions := testData sessions := testData
@ -59,13 +58,13 @@ func TestTerms(t *testing.T) {
for _, step := range group.Steps { for _, step := range group.Steps {
_, err := en.Exec(ctx, []byte(step.Input)) _, err := en.Exec(ctx, []byte(step.Input))
if err != nil { if err != nil {
t.Fail() t.Fatalf("Test case '%s' failed during Exec: %v", group.Name, err)
} }
w := bytes.NewBuffer(nil) w := bytes.NewBuffer(nil)
_, err = en.Flush(ctx, w) _, err = en.Flush(ctx, w)
if err != nil { if err != nil {
t.Errorf("Test case '%s' failed during Flush: %v", group.Name, err) t.Fatalf("Test case '%s' failed during Flush: %v", group.Name, err)
} }
b := w.Bytes() b := w.Bytes()
if !bytes.Equal(b, []byte(step.ExpectedContent)) { if !bytes.Equal(b, []byte(step.ExpectedContent)) {
@ -78,8 +77,8 @@ func TestTerms(t *testing.T) {
} }
func TestAccountRegistrationRejectTerms(t *testing.T) { func TestAccountRegistrationRejectTerms(t *testing.T) {
en, _ := enginetest.TestEngine("session1234112") en, fn := enginetest.TestEngine("session1234112_b")
defer en.Finish() defer fn()
ctx := context.Background() ctx := context.Background()
sessions := testData sessions := testData
for _, session := range sessions { for _, session := range sessions {
@ -88,7 +87,7 @@ func TestAccountRegistrationRejectTerms(t *testing.T) {
for _, step := range group.Steps { for _, step := range group.Steps {
cont, err := en.Exec(ctx, []byte(step.Input)) cont, err := en.Exec(ctx, []byte(step.Input))
if err != nil { if err != nil {
t.Errorf("Test case '%s' failed at input '%s': %v", group.Name, step.Input, err) t.Fatalf("Test case '%s' failed at input '%s': %v", group.Name, step.Input, err)
return return
} }
if !cont { if !cont {
@ -96,7 +95,7 @@ func TestAccountRegistrationRejectTerms(t *testing.T) {
} }
w := bytes.NewBuffer(nil) w := bytes.NewBuffer(nil)
if _, err := en.Flush(ctx, w); err != nil { if _, err := en.Flush(ctx, w); err != nil {
t.Errorf("Test case '%s' failed during Flush: %v", group.Name, err) t.Fatalf("Test case '%s' failed during Flush: %v", group.Name, err)
} }
b := w.Bytes() b := w.Bytes()
@ -109,8 +108,8 @@ func TestAccountRegistrationRejectTerms(t *testing.T) {
} }
func TestAccountRegistrationInvalidPin(t *testing.T) { func TestAccountRegistrationInvalidPin(t *testing.T) {
en, _ := enginetest.TestEngine("session1234112") en, fn := enginetest.TestEngine("session1234112")
defer en.Finish() defer fn()
ctx := context.Background() ctx := context.Background()
sessions := testData sessions := testData
for _, session := range sessions { for _, session := range sessions {
@ -119,7 +118,7 @@ func TestAccountRegistrationInvalidPin(t *testing.T) {
for _, step := range group.Steps { for _, step := range group.Steps {
cont, err := en.Exec(ctx, []byte(step.Input)) cont, err := en.Exec(ctx, []byte(step.Input))
if err != nil { if err != nil {
t.Errorf("Test case '%s' failed at input '%s': %v", group.Name, step.Input, err) t.Fatalf("Test case '%s' failed at input '%s': %v", group.Name, step.Input, err)
return return
} }
if !cont { if !cont {
@ -127,7 +126,7 @@ func TestAccountRegistrationInvalidPin(t *testing.T) {
} }
w := bytes.NewBuffer(nil) w := bytes.NewBuffer(nil)
if _, err := en.Flush(ctx, w); err != nil { if _, err := en.Flush(ctx, w); err != nil {
t.Errorf("Test case '%s' failed during Flush: %v", group.Name, err) t.Fatalf("Test case '%s' failed during Flush: %v", group.Name, err)
} }
b := w.Bytes() b := w.Bytes()