Skip to content

Commit ebc80f4

Browse files
committed
Working test with mocks
1 parent ffd4f57 commit ebc80f4

File tree

5 files changed

+131
-23
lines changed

5 files changed

+131
-23
lines changed

cmd/root.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,11 @@ For example:
3535
if err != nil {
3636
return errors.Annotatef(err, "failed to configure DDNS provider")
3737
}
38+
daemon := ddns.NewDDNSDaemon(provider, ddns.NewDefaultIPProvider(), ddns.NewDefaultConfigProvider())
3839
if conf.Daemon.Get() {
39-
return errors.Trace(ddns.StartWithDefaults(provider))
40+
return errors.Trace(daemon.StartWithDefaults())
4041
}
41-
return errors.Trace(ddns.Update(provider))
42+
return errors.Trace(daemon.Update())
4243
},
4344
Version: meta.Version,
4445
}

ddns/ddns.go

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,26 +20,34 @@ type IPProvider interface {
2020
Get() (ip string, err error)
2121
}
2222

23-
type ConfigProvider interface {
24-
Get() (domain, record string, err error)
25-
}
23+
type DefaultIPProvider struct{}
2624

27-
type ipProvider struct{}
28-
29-
func (p *ipProvider) Get() (string, error) {
25+
func (p *DefaultIPProvider) Get() (string, error) {
3026
ip, err := ip.GetPublicIPWithRetry(10, 5*time.Second)
3127
if err != nil {
3228
return "", errors.Trace(err)
3329
}
3430
return ip, nil
3531
}
3632

37-
type configProvider struct{}
33+
func NewDefaultIPProvider() *DefaultIPProvider {
34+
return &DefaultIPProvider{}
35+
}
36+
37+
type ConfigProvider interface {
38+
Get() (domain, record string, err error)
39+
}
3840

39-
func (p *configProvider) Get() (domain, record string, err error) {
41+
type DefaultConfigProvider struct{}
42+
43+
func (p *DefaultConfigProvider) Get() (domain, record string, err error) {
4044
return conf.Domain.Get(), conf.Record.Get(), nil
4145
}
4246

47+
func NewDefaultConfigProvider() *DefaultConfigProvider {
48+
return &DefaultConfigProvider{}
49+
}
50+
4351
type Daemon interface {
4452
Update(provider DDNSProvider) error
4553
Start(provider DDNSProvider, updatePeriod, failureRetryDelay time.Duration) error
@@ -150,7 +158,7 @@ func (d *DDNSDaemon) Start(updatePeriod, failureRetryDelay time.Duration) error
150158
}
151159

152160
// StartWithDefaults calls Start but with default values
153-
func (d *DDNSDaemon) StartWithDefaults(provider DDNSProvider) error {
161+
func (d *DDNSDaemon) StartWithDefaults() error {
154162
t := 10 * time.Second
155163
return errors.Trace(d.Start(t, t))
156164
}

ddns/ddns_test.go

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,29 @@ import (
44
"testing"
55

66
"github.com/golang/mock/gomock"
7-
"github.com/stretchr/testify/assert"
7+
"github.com/mattolenik/cloudflare-ddns-client/test"
88
)
99

1010
func TestDDNSDaemon(t *testing.T) {
11-
assert := assert.New(t)
12-
ctrl := gomock.NewController(t)
13-
defer ctrl.Finish()
14-
d := NewMockDaemon(ctrl)
15-
p := NewMockDDNSProvider(ctrl)
11+
assert, _, ctrl, cleanup := test.NewTools(t)
12+
defer cleanup()
13+
1614
domain := "abc.com"
1715
record := "xyz.abc.com"
18-
ip := "1.1.1.1"
19-
p.EXPECT().Update(gomock.Eq(domain), gomock.Eq(record), gomock.Eq(ip)).Return(nil).Times(1)
20-
p.EXPECT().Get(domain, record).Return(ip, nil).Times(1)
21-
assert.NoError(d.Update(p))
22-
ip, err := p.Get(domain)
16+
expectedIP := "1.1.1.1"
17+
18+
ddnsProvider := NewMockDDNSProvider(ctrl)
19+
ipProvider := NewMockIPProvider(ctrl)
20+
configProvider := NewMockConfigProvider(ctrl)
21+
ddnsDaemon := NewDDNSDaemon(ddnsProvider, ipProvider, configProvider)
22+
23+
configProvider.EXPECT().Get().Return(domain, record, nil)
24+
ipProvider.EXPECT().Get().Return(expectedIP, nil)
25+
ddnsProvider.EXPECT().Update(gomock.Eq(domain), gomock.Eq(record), gomock.Eq(expectedIP)).Return(nil).Times(1)
26+
ddnsProvider.EXPECT().Get(domain, record).Return(expectedIP, nil).Times(1)
27+
assert.NoError(ddnsDaemon.Update())
28+
29+
actualIP, err := ddnsProvider.Get(domain, record)
2330
assert.NoError(err)
24-
assert.Equal(ip, ip)
31+
assert.Equal(expectedIP, actualIP)
2532
}

ddns/mocks.go

Lines changed: 77 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/test.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package test
2+
3+
import (
4+
"testing"
5+
6+
"github.com/golang/mock/gomock"
7+
"github.com/stretchr/testify/assert"
8+
"github.com/stretchr/testify/require"
9+
)
10+
11+
// NewTools creates new instances of common testing tools
12+
func NewTools(t *testing.T) (asrt *assert.Assertions, req *require.Assertions, controller *gomock.Controller, cleanup func()) {
13+
ctrl := gomock.NewController(t)
14+
return assert.New(t), require.New(t), ctrl, ctrl.Finish
15+
}

0 commit comments

Comments
 (0)