Skip to content

Commit

Permalink
add mock tests for account and client
Browse files Browse the repository at this point in the history
  • Loading branch information
Eslam-Nawara committed Feb 23, 2025
1 parent 98b1cb5 commit 67a81df
Show file tree
Hide file tree
Showing 7 changed files with 409 additions and 0 deletions.
1 change: 1 addition & 0 deletions go.work.sum
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:ma
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI=
golang.org/x/telemetry v0.0.0-20240521205824-bda55230c457/go.mod h1:pRgIJT+bRLFKnoM1ldnzKoxTIn14Yxz928LQRYYgIN0=
golang.org/x/term v0.21.0/go.mod h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0=
Expand Down
4 changes: 4 additions & 0 deletions node-registrar/client/account.go
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,10 @@ func (c RegistrarClient) getAccountByPK(pk []byte) (account Account, err error)
}

func (c RegistrarClient) updateAccount(opts []UpdateAccountOpts) (err error) {
err = c.ensureTwinID()
if err != nil {
return errors.Wrap(err, "failed to ensure twin id")
}
url, err := url.JoinPath(c.baseURL, "accounts", fmt.Sprint(c.twinID))
if err != nil {
return errors.Wrap(err, "failed to construct registrar url")
Expand Down
147 changes: 147 additions & 0 deletions node-registrar/client/account_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@
package client

import (
"encoding/base64"
"net/http"
"net/http/httptest"
"net/url"
"testing"

"github.com/stretchr/testify/require"
)

func TestCreateAccount(t *testing.T) {
var request int
var count int
require := require.New(t)

pk, seed, err := aliceKeys()
require.NoError(err)
publicKeyBase64 := base64.StdEncoding.EncodeToString(pk)
account.PublicKey = publicKeyBase64

testServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
statusCode, body := accountHandler(r, request, count, require)
w.WriteHeader(statusCode)
_, err := w.Write(body)
require.NoError(err)
count++
}))
defer testServer.Close()

baseURL, err := url.JoinPath(testServer.URL, "v1")
require.NoError(err)

count = 0
request = newClientWithNoAccount
c, err := NewRegistrarClient(baseURL, seed)
require.NoError(err)

t.Run("test create account created successfully", func(t *testing.T) {
count = 0
request = createAccountStatusCreated
result, err := c.CreateAccount(account.Relays, account.RMBEncKey)
require.NoError(err)
require.Equal(account, result)
})
}

func TestUpdateAccount(t *testing.T) {
var request int
var count int
require := require.New(t)

pk, seed, err := aliceKeys()
require.NoError(err)
publicKeyBase64 := base64.StdEncoding.EncodeToString(pk)
account.PublicKey = publicKeyBase64

testServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
statusCode, body := accountHandler(r, request, count, require)
w.WriteHeader(statusCode)
_, err := w.Write(body)
require.NoError(err)

count++
}))
defer testServer.Close()

baseURL, err := url.JoinPath(testServer.URL, "v1")
require.NoError(err)

t.Run("test update account updated successfully", func(t *testing.T) {
count = 0
request = newClientWithAccountNoNode
c, err := NewRegistrarClient(baseURL, seed)

require.NoError(err)
require.Equal(c.twinID, account.TwinID)
require.Equal([]byte(c.keyPair.publicKey), pk)

count = 0
request = updateAccountWithStatusOK
relays := []string{"relay1"}
err = c.UpdateAccount(UpdateAccountWithRelays(relays))
require.NoError(err)
})

t.Run("test update account account not found", func(t *testing.T) {
count = 0
request = newClientWithNoAccount
c, err := NewRegistrarClient(baseURL, seed)

require.NoError(err)
require.Equal([]byte(c.keyPair.publicKey), pk)

count = 0
request = updateAccountWithNoAccount
relays := []string{"relay1"}
err = c.UpdateAccount(UpdateAccountWithRelays(relays))
require.Error(err)
})
}

func TestGetAccount(t *testing.T) {
var request int
var count int
require := require.New(t)

pk, seed, err := aliceKeys()
require.NoError(err)
publicKeyBase64 := base64.StdEncoding.EncodeToString(pk)
account.PublicKey = publicKeyBase64

testServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
statusCode, body := accountHandler(r, request, count, require)
w.WriteHeader(statusCode)
_, err := w.Write(body)
require.NoError(err)
count++
}))
defer testServer.Close()

baseURL, err := url.JoinPath(testServer.URL, "v1")
require.NoError(err)

count = 0
request = newClientWithAccountNoNode
c, err := NewRegistrarClient(baseURL, seed)
require.NoError(err)
require.Equal(c.twinID, account.TwinID)
require.Equal([]byte(c.keyPair.publicKey), pk)

t.Run("test get account with id account not found", func(t *testing.T) {
count = 0
request = getAccountWithIDStatusNotFount
_, err := c.GetAccount(account.TwinID)
require.Error(err)
})

t.Run("test update account account not found", func(t *testing.T) {
count = 0
request = getAccountWithIDStatusOK
acc, err := c.GetAccount(account.TwinID)
require.NoError(err)
require.Equal(account, acc)
})
}
63 changes: 63 additions & 0 deletions node-registrar/client/client_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package client

import (
"encoding/base64"
"net/http"
"net/http/httptest"
"net/url"
"testing"

"github.com/stretchr/testify/require"
)

func TestNewRegistrarClient(t *testing.T) {
var request int
var count int
require := require.New(t)

pk, seed, err := aliceKeys()
require.NoError(err)
publicKeyBase64 := base64.StdEncoding.EncodeToString(pk)
account.PublicKey = publicKeyBase64

testServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
statusCode, body := accountHandler(r, request, count, require)
w.WriteHeader(statusCode)
_, err := w.Write(body)
require.NoError(err)
count++
}))
defer testServer.Close()

baseURL, err := url.JoinPath(testServer.URL, "v1")
require.NoError(err)

t.Run("test new registrar client with no account", func(t *testing.T) {
count = 0
request = newClientWithNoAccount
c, err := NewRegistrarClient(baseURL, seed)
require.NoError(err)
require.Equal(c.twinID, uint64(0))
require.Equal(c.nodeID, uint64(0))
require.Equal([]byte(c.keyPair.publicKey), pk)
})

t.Run("test new registrar client with account and no node", func(t *testing.T) {
count = 0
request = newClientWithAccountNoNode
c, err := NewRegistrarClient(baseURL, seed)
require.NoError(err)
require.Equal(c.twinID, account.TwinID)
require.Equal(c.nodeID, uint64(0))
require.Equal([]byte(c.keyPair.publicKey), pk)
})
t.Run("test new registrar client with no account", func(t *testing.T) {
count = 0
request = newClientWithAccountAndNode
c, err := NewRegistrarClient(baseURL, seed)
require.NoError(err)
require.Equal(c.twinID, account.TwinID)
require.Equal(c.nodeID, uint64(1))
require.Equal([]byte(c.keyPair.publicKey), pk)
})
}
Loading

0 comments on commit 67a81df

Please sign in to comment.