From 99892b96217ccb322eaceec5a786c9dde239ecb4 Mon Sep 17 00:00:00 2001 From: Suraj Singh Date: Mon, 13 Apr 2020 13:38:36 +0530 Subject: [PATCH 1/5] added additional test --- go.sum | 1 + internal/lockserver/lockserver_test.go | 50 ++++++++++++++++++++++++-- 2 files changed, 49 insertions(+), 2 deletions(-) diff --git a/go.sum b/go.sum index 331fa69..c0565d7 100644 --- a/go.sum +++ b/go.sum @@ -2,6 +2,7 @@ github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/objx v0.1.0 h1:4G4v2dO3VZwixGIRoQ5Lfboy6nUhCyYzaqnIAPPhYs4= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= diff --git a/internal/lockserver/lockserver_test.go b/internal/lockserver/lockserver_test.go index 62ef6f3..c5c02ad 100644 --- a/internal/lockserver/lockserver_test.go +++ b/internal/lockserver/lockserver_test.go @@ -9,8 +9,9 @@ import ( "github.com/stretchr/testify/assert" ) -func TestSingleLockAndRelease(t *testing.T) { - go StartServer() +func TestDoubleLockAndRelease(t *testing.T) { + t.Logf("acquire a release a acquire a release a") + // go StartServer() assert := assert.New(t) client, err := rpc.DialHTTP("tcp", "localhost:55550") if err != nil { @@ -29,4 +30,49 @@ func TestSingleLockAndRelease(t *testing.T) { if err != nil { assert.Fail(fmt.Sprintf("Failed to release lock: %v", err)) } + + err = client.Call("Service.Acquire", "1", &y) + + if err != nil { + assert.Fail(fmt.Sprintf("Failed to acquire lock: %v", err)) + } + err = client.Call("Service.Release", "1", &y) + if err != nil { + assert.Fail(fmt.Sprintf("Failed to release lock: %v", err)) + } + + t.Logf("PASSED") + +} + +func TestMultipleLockAndRelease(t *testing.T) { + t.Logf("acquire a acquire b release b release a\n") + assert := assert.New(t) + client, err := rpc.DialHTTP("tcp", "localhost:55550") + + var y float32 + y = 3.4 + if err != nil { + log.Fatal("Connection error: ", err) + } + err = client.Call("Service.Acquire", "1", &y) + + if err != nil { + assert.Fail(fmt.Sprintf("Failed to acquire lock: %v", err)) + } + err = client.Call("Service.Acquire", "2", &y) + if err != nil { + assert.Fail(fmt.Sprintf("Failed to release lock: %v", err)) + } + + err = client.Call("Service.Release", "2", &y) + if err != nil { + assert.Fail(fmt.Sprintf("Failed to release lock: %v", err)) + } + + err = client.Call("Service.Release", "1", &y) + if err != nil { + assert.Fail(fmt.Sprintf("Failed to release lock: %v", err)) + } + } From 309ad6b6ec99831594ffcac83afc820499e7f31c Mon Sep 17 00:00:00 2001 From: Suraj Singh Date: Thu, 16 Apr 2020 17:21:24 +0530 Subject: [PATCH 2/5] added concurrent test, not working --- internal/lockserver/lockserver.go | 4 +- internal/lockserver/lockserver_test.go | 80 ++++++++++++++++++++------ 2 files changed, 66 insertions(+), 18 deletions(-) diff --git a/internal/lockserver/lockserver.go b/internal/lockserver/lockserver.go index 0ecc49c..9d2ef37 100644 --- a/internal/lockserver/lockserver.go +++ b/internal/lockserver/lockserver.go @@ -38,7 +38,7 @@ func (s *Service) HealthCheck(ip string, counter *int) error { } // CheckAcquire returns nil if the file is acquired -func (s *Service) CheckAcquire(fileID string) error { +func (s *Service) CheckAcquire(fileID string, counter *float32) error { lockMap.Mutex.Lock() if lockMap.LockMap[fileID] { lockMap.Mutex.Unlock() @@ -62,7 +62,7 @@ func (s *Service) Acquire(fileID string, counter *float32) error { } // CheckRelease returns nil if the file is released -func (s *Service) CheckRelease(fileID string) error { +func (s *Service) CheckRelease(fileID string, counter *float32) error { lockMap.Mutex.Lock() if lockMap.LockMap[fileID] { lockMap.Mutex.Unlock() diff --git a/internal/lockserver/lockserver_test.go b/internal/lockserver/lockserver_test.go index 49af2f0..5666773 100644 --- a/internal/lockserver/lockserver_test.go +++ b/internal/lockserver/lockserver_test.go @@ -65,6 +65,10 @@ func TestSingleLockAndRelease1(t *testing.T) { if err != nil { assert.Fail(fmt.Sprintf("Failed to acquire lock: %v", err)) } + result := client.Call("Service.CheckAcquire", "1", &y) + if result != nil { + assert.Fail(fmt.Sprintf("Lock was not acquired")) + } err = client.Call("Service.Release", "1", &y) @@ -72,16 +76,32 @@ func TestSingleLockAndRelease1(t *testing.T) { assert.Fail(fmt.Sprintf("Failed to release lock: %v", err)) } + result = client.Call("Service.CheckRelease", "1", &y) + if result != nil { + assert.Fail(fmt.Sprintf("Lock was not released")) + } + err = client.Call("Service.Acquire", "1", &y) if err != nil { assert.Fail(fmt.Sprintf("Failed to acquire lock: %v", err)) } + + result = client.Call("Service.CheckAcquire", "1", &y) + if result != nil { + assert.Fail(fmt.Sprintf("Lock was not acquired")) + } + err = client.Call("Service.Release", "1", &y) if err != nil { assert.Fail(fmt.Sprintf("Failed to release lock: %v", err)) } + result = client.Call("Service.CheckRelease", "1", &y) + if result != nil { + assert.Fail(fmt.Sprintf("Lock was not released")) + } + t.Logf("PASSED") } @@ -103,7 +123,7 @@ func TestMultipleLockAndRelease(t *testing.T) { } result := client.Call("Service.CheckAcquire", "1", &y) - if not result { + if result != nil { assert.Fail(fmt.Sprintf("Lock was not acquired")) } @@ -112,31 +132,59 @@ func TestMultipleLockAndRelease(t *testing.T) { assert.Fail(fmt.Sprintf("Failed to release lock: %v", err)) } + result = client.Call("Service.CheckAcquire", "2", &y) + if result != nil { + assert.Fail(fmt.Sprintf("Lock was not acquired")) + } + err = client.Call("Service.Release", "2", &y) if err != nil { assert.Fail(fmt.Sprintf("Failed to release lock: %v", err)) } + result = client.Call("Service.CheckRelease", "2", &y) + if result != nil { + assert.Fail(fmt.Sprintf("Lock was not released")) + } err = client.Call("Service.Release", "1", &y) if err != nil { assert.Fail(fmt.Sprintf("Failed to release lock: %v", err)) } + result = client.Call("Service.CheckRelease", "1", &y) + if result != nil { + assert.Fail(fmt.Sprintf("Lock was not released")) + } } - func TestConcurrentRoutinesAcquiringSameLock(t *testing.T) { - - client, err := rpc.DialHTTP("tcp", "localhost:55550") - - func commonTest(tid uint8) { - t.Logf("client %d acquire a release a", tid) - err = client.Call("Service.Release", "1", &y) - if err != nil { - assert.Fail(fmt.Sprintf("Failed to release lock: %v", err)) - } - t.Logf("client %d acquire done") - result := client.Call("Service.CheckAcquire", "1", &y) - - } -} \ No newline at end of file + for i := 0; i < 5; i++ { + go func(t *testing.T, tid int) { + assert := assert.New(t) + client, err := rpc.DialHTTP("tcp", "localhost:55550") + var y float32 + y = 3.4 + t.Logf("client %d acquire a release a", tid) + err = client.Call("Service.Release", "1", &y) + if err != nil { + assert.Fail(fmt.Sprintf("Failed to release lock: %v", err)) + } + t.Logf("client %d acquire done", tid) + result := client.Call("Service.CheckAcquire", "1", &y) + if result != nil { + assert.Fail(fmt.Sprintf("Lock was not acquired")) + } + time.Sleep(1) + t.Logf("client %d release", tid) + err = client.Call("Service.Release", "1", &y) + if err != nil { + assert.Fail(fmt.Sprintf("Failed to release lock: %v", err)) + } + result = client.Call("Service.CheckRelease", "1", &y) + if result != nil { + assert.Fail(fmt.Sprintf("Lock was not released")) + } + t.Logf("client %d release done", tid) + }(t, i) + } +} From 549997f73181bae2edb958495f9e9f4f16c20366 Mon Sep 17 00:00:00 2001 From: SUMUKHA-PK Date: Sat, 18 Apr 2020 17:38:22 +0530 Subject: [PATCH 3/5] minor changes in testing --- internal/lockserver/lockserver_test.go | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/internal/lockserver/lockserver_test.go b/internal/lockserver/lockserver_test.go index 5666773..faacc3f 100644 --- a/internal/lockserver/lockserver_test.go +++ b/internal/lockserver/lockserver_test.go @@ -102,12 +102,19 @@ func TestSingleLockAndRelease1(t *testing.T) { assert.Fail(fmt.Sprintf("Lock was not released")) } - t.Logf("PASSED") - + shutdownSignal <- os.Kill + timer1 = time.NewTimer(5 * time.Millisecond) + <-timer1.C } func TestMultipleLockAndRelease(t *testing.T) { t.Logf("acquire a acquire b release b release a\n") + shutdownSignal := make(chan os.Signal, 1) + go StartServer(shutdownSignal) + + timer1 := time.NewTimer(5 * time.Millisecond) + <-timer1.C + assert := assert.New(t) client, err := rpc.DialHTTP("tcp", "localhost:55550") From e4bb655a848260b6ad6183a42f801cf507461dce Mon Sep 17 00:00:00 2001 From: SUMUKHA-PK Date: Sat, 18 Apr 2020 19:25:00 +0530 Subject: [PATCH 4/5] minor changes in testing --- internal/lockserver/lockserver_test.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/internal/lockserver/lockserver_test.go b/internal/lockserver/lockserver_test.go index faacc3f..46e0e7b 100644 --- a/internal/lockserver/lockserver_test.go +++ b/internal/lockserver/lockserver_test.go @@ -162,9 +162,18 @@ func TestMultipleLockAndRelease(t *testing.T) { assert.Fail(fmt.Sprintf("Lock was not released")) } + shutdownSignal <- os.Kill + timer1 = time.NewTimer(5 * time.Millisecond) + <-timer1.C } func TestConcurrentRoutinesAcquiringSameLock(t *testing.T) { + shutdownSignal := make(chan os.Signal, 1) + go StartServer(shutdownSignal) + + timer1 := time.NewTimer(5 * time.Millisecond) + <-timer1.C + for i := 0; i < 5; i++ { go func(t *testing.T, tid int) { assert := assert.New(t) @@ -194,4 +203,7 @@ func TestConcurrentRoutinesAcquiringSameLock(t *testing.T) { t.Logf("client %d release done", tid) }(t, i) } + shutdownSignal <- os.Kill + timer1 = time.NewTimer(5 * time.Millisecond) + <-timer1.C } From 75f5eae0a1f7d8fe57f78a537170bec5f30c2f91 Mon Sep 17 00:00:00 2001 From: SUMUKHA-PK Date: Sat, 18 Apr 2020 20:44:53 +0530 Subject: [PATCH 5/5] fixed errors --- internal/lockserver/lockserver.go | 1 + internal/lockserver/lockserver_test.go | 7 ++++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/internal/lockserver/lockserver.go b/internal/lockserver/lockserver.go index 9d2ef37..a8599b0 100644 --- a/internal/lockserver/lockserver.go +++ b/internal/lockserver/lockserver.go @@ -74,6 +74,7 @@ func (s *Service) CheckRelease(fileID string, counter *float32) error { // Release lets a client to release a lock on an object. func (s *Service) Release(fileID string, counter *float32) error { + fmt.Println("WE") lockMap.Mutex.Lock() if lockMap.LockMap[fileID] { delete(lockMap.LockMap, fileID) diff --git a/internal/lockserver/lockserver_test.go b/internal/lockserver/lockserver_test.go index 46e0e7b..63c63a1 100644 --- a/internal/lockserver/lockserver_test.go +++ b/internal/lockserver/lockserver_test.go @@ -174,12 +174,13 @@ func TestConcurrentRoutinesAcquiringSameLock(t *testing.T) { timer1 := time.NewTimer(5 * time.Millisecond) <-timer1.C + client, err := rpc.DialHTTP("tcp", "localhost:55550") + var y float32 + y = 3.4 + for i := 0; i < 5; i++ { go func(t *testing.T, tid int) { assert := assert.New(t) - client, err := rpc.DialHTTP("tcp", "localhost:55550") - var y float32 - y = 3.4 t.Logf("client %d acquire a release a", tid) err = client.Call("Service.Release", "1", &y) if err != nil {