1
1
package fritzbox
2
2
3
3
import (
4
+ "context"
4
5
"errors"
5
6
"fmt"
7
+ "log"
8
+ "net"
9
+ "net/http"
6
10
"os"
7
11
"testing"
8
12
9
13
"gopkg.in/xmlpath.v2"
10
14
11
15
"github.com/stretchr/testify/assert"
16
+ "github.com/stretchr/testify/require"
12
17
)
13
18
14
19
func testfile (name string ) * xmlpath.Node {
15
20
file , err := os .Open (fmt .Sprintf ("testdata/%s.xml" , name ))
16
-
17
21
if err != nil {
18
22
panic (err )
19
23
}
@@ -39,3 +43,56 @@ func checkFault(root *xmlpath.Node) error {
39
43
}
40
44
return nil
41
45
}
46
+
47
+ func TestClient (t * testing.T ) {
48
+ assert := assert .New (t )
49
+ require := require .New (t )
50
+
51
+ listener , err := net .Listen ("tcp" , "127.0.0.1:0" )
52
+ require .NoError (err )
53
+ defer listener .Close ()
54
+
55
+ mux := http .NewServeMux ()
56
+ mux .HandleFunc ("/igdupnp/control/WANCommonIFC1" , func (w http.ResponseWriter , r * http.Request ) {
57
+ http .ServeFile (w , r , "testdata/linkspeed/valid.xml" )
58
+ })
59
+
60
+ srv := & http.Server {Handler : mux }
61
+ go func () {
62
+ if e := srv .Serve (listener ); ! errors .Is (e , http .ErrServerClosed ) {
63
+ log .Printf ("unexpected HTTP server shutdown: %v" , e )
64
+ }
65
+ }()
66
+ defer srv .Close ()
67
+
68
+ client := Client {
69
+ Endpoint : listener .Addr ().String (),
70
+ Context : context .Background (),
71
+ }
72
+
73
+ // should succeed
74
+ linkSpeed , err := client .GetLinkspeed ()
75
+ assert .NoError (err )
76
+ if assert .NotNil (linkSpeed ) {
77
+ assert .Equal (51392000 , linkSpeed .DownlinkBitRate )
78
+ }
79
+
80
+ // should fail (no handler)
81
+ _ , err = client .GetPublicAddress ()
82
+ if assert .Error (err ) {
83
+ assert .Contains (err .Error (), "unexpected status code 404 for http://127" )
84
+ }
85
+ }
86
+
87
+ func TestClientInvalidAddress (t * testing.T ) {
88
+ assert := assert .New (t )
89
+ client := NewClientFromIP (net.IP {127 , 0 , 0 , 2 })
90
+
91
+ assert .Equal ("127.0.0.2:49000" , client .Endpoint )
92
+
93
+ // should succeed
94
+ _ , err := client .GetLinkspeed ()
95
+ if assert .Error (err ) {
96
+ assert .Contains (err .Error (), "dial tcp 127.0.0.2:49000: connect: connection refused" )
97
+ }
98
+ }
0 commit comments