Skip to content

Commit 399bdcb

Browse files
author
Mikhail Podtserkovskiy
committed
QA-7710: app update node address method
1 parent 162b33f commit 399bdcb

File tree

7 files changed

+101
-0
lines changed

7 files changed

+101
-0
lines changed

pool/mocks.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,3 +72,8 @@ func (s *StrategyListMock) FixNodeStatus(node Node) error {
7272
args := s.Called(node)
7373
return args.Error(0)
7474
}
75+
76+
func (s *StorageMock) UpdateAddress(node Node, newAddress string) error {
77+
args := s.Called(node, newAddress)
78+
return args.Error(0)
79+
}

pool/pool.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ type StorageInterface interface {
2525
GetByAddress(string) (Node, error)
2626
GetAll() ([]Node, error)
2727
Remove(Node) error
28+
UpdateAddress(node Node, newAddress string) error
2829
}
2930

3031
type StrategyInterface interface {

storage/local/local_test.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,3 +149,21 @@ func TestStorage_Remove_Negative(t *testing.T) {
149149
err := s.Remove(node)
150150
assert.Error(t, err, storage.ErrNotFound)
151151
}
152+
153+
func TestStorage_UpdateAddress_UpdatesValue(t *testing.T) {
154+
key := "1234567890"
155+
node := pool.Node{Address: "1", Key: key}
156+
s := Storage{db: map[string]*pool.Node{key: &node}}
157+
expectedAddress := "2"
158+
err := s.UpdateAddress(node, expectedAddress)
159+
assert.NoError(t, err)
160+
assert.Equal(t, expectedAddress, s.db[key].Address)
161+
}
162+
163+
func TestStorage_UpdateAddress_ReturnsErrNotFound(t *testing.T) {
164+
key := "1234567890"
165+
node := pool.Node{Address: "1", Key: key}
166+
s := Storage{db: map[string]*pool.Node{key: &node}}
167+
err := s.UpdateAddress(pool.Node{Key:"12345"}, "1234567890")
168+
assert.Equal(t, storage.ErrNotFound, err)
169+
}

storage/local/storage.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,3 +129,14 @@ func (s *Storage) Remove(node pool.Node) error {
129129
delete(s.db, node.Key)
130130
return nil
131131
}
132+
133+
func (s *Storage) UpdateAddress(node pool.Node, newAddress string) error {
134+
s.mu.Lock()
135+
defer s.mu.Unlock()
136+
storedNode, ok := s.db[node.Key]
137+
if !ok {
138+
return storage.ErrNotFound
139+
}
140+
storedNode.Address = newAddress
141+
return nil
142+
}

storage/mysql/storage.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,27 @@ func (s *MysqlStorage) Remove(node pool.Node) error {
333333
return nil
334334
}
335335

336+
func (s *MysqlStorage) UpdateAddress(node pool.Node, newAddress string) error {
337+
res, err := s.db.Exec(
338+
"UPDATE node SET address = ? WHERE `key` = ?",
339+
newAddress,
340+
node.Key,
341+
)
342+
if err != nil {
343+
err = errors.New("[MysqlStorage/UpdateAddress] update table `node`, " + err.Error())
344+
return err
345+
}
346+
rowsAffected, err := res.RowsAffected()
347+
if err != nil {
348+
err = errors.New("[MysqlStorage/UpdateAddress] get affected rows, " + err.Error())
349+
return err
350+
}
351+
if rowsAffected == 0 {
352+
return storage.ErrNotFound
353+
}
354+
return nil
355+
}
356+
336357
func mapper(model *MysqlNodeModel) *pool.Node {
337358
node := pool.NewNode(
338359
model.Key,

storage/tests/comon_test.go

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package tests
22

33
import (
4+
storageLib "github.com/qa-dev/jsonwire-grid/storage"
45
"github.com/qa-dev/jsonwire-grid/pool"
56
"github.com/qa-dev/jsonwire-grid/pool/capabilities"
67
"github.com/stretchr/testify/assert"
@@ -294,3 +295,37 @@ func testStorage_SetBusy(t *testing.T, p PrepareInterface) {
294295
assert.Equal(t, pool.NodeStatusBusy, node.Status, "Node not Busy")
295296
assert.Equal(t, expectedSessionID, node.SessionID, "Not saved sessionID")
296297
}
298+
299+
// testStorage_UpdateAdderss_UpdatesValue успешное обновления адреса ноды
300+
func testStorage_UpdateAdderss_UpdatesValue(t *testing.T, p PrepareInterface) {
301+
t.Parallel()
302+
storage, deferFunc := p.CreateStorage()
303+
defer deferFunc()
304+
node := pool.Node{SessionID: "sess", Key: "123", Status: pool.NodeStatusAvailable, Address: "qqqqqq", CapabilitiesList: []capabilities.Capabilities{{"1": "2"}}}
305+
err := storage.Add(node, 0)
306+
if err != nil {
307+
t.Fatal("Error add node, " + err.Error())
308+
}
309+
expectedAddress := "newAddressId"
310+
err = storage.UpdateAddress(node, expectedAddress)
311+
assert.Nil(t, err)
312+
node, err = storage.GetBySession("sess")
313+
if err != nil {
314+
t.Fatal("Error add node, " + err.Error())
315+
}
316+
assert.Equal(t, expectedAddress, node.Address, "Not updated address")
317+
}
318+
319+
// testStorage_UpdateAdderss_ReturnsErrNotFound попытка обновить несуществующую ноду
320+
func testStorage_UpdateAdderss_ReturnsErrNotFound(t *testing.T, p PrepareInterface) {
321+
t.Parallel()
322+
storage, deferFunc := p.CreateStorage()
323+
defer deferFunc()
324+
node := pool.Node{SessionID: "sess", Key: "123", Status: pool.NodeStatusAvailable, Address: "qqqqqq", CapabilitiesList: []capabilities.Capabilities{{"1": "2"}}}
325+
err := storage.Add(pool.Node{Key:"12345"}, 0)
326+
if err != nil {
327+
t.Fatal("Error add node, " + err.Error())
328+
}
329+
err = storage.UpdateAddress(node, "trololo")
330+
assert.Equal(t, storageLib.ErrNotFound, err)
331+
}

storage/tests/mysql_test.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,3 +155,13 @@ func TestMysqlStorage_SetAvailable(t *testing.T) {
155155
func TestMysqlStorage_SetBusy(t *testing.T) {
156156
testStorage_SetBusy(t, mv)
157157
}
158+
159+
// TestMysqlStorage_UpdateAdderss_UpdatesValue see testStorage_UpdateAdderss_UpdatesValue
160+
func TestMysqlStorage_UpdateAdderss_UpdatesValue(t *testing.T) {
161+
testStorage_UpdateAdderss_UpdatesValue(t, mv)
162+
}
163+
164+
// TestMysqlStorage_UpdateAdderss_ReturnsErrNotFound see testStorage_UpdateAdderss_ReturnsErrNotFound
165+
func TestMysqlStorage_UpdateAdderss_ReturnsErrNotFound(t *testing.T) {
166+
testStorage_UpdateAdderss_ReturnsErrNotFound(t, mv)
167+
}

0 commit comments

Comments
 (0)