summaryrefslogtreecommitdiff
path: root/homematic/xmlrpc_test.go
blob: 732f6f8752932d9d79a65a62e1a3464d6f9790c4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package homematic

import (
	"fmt"
	"io"
	"net"
	"net/http"
	"testing"

	"github.com/beevik/etree"
)

func TestRequesterResponder(t *testing.T) {
	ip := net.ParseIP("127.0.0.1")

	resp := NewResponder(ip, 0, func(w http.ResponseWriter, r *http.Request) {
		io.Copy(w, r.Body)
	})

	cancel, port, err := resp.Start()
	if err != nil {
		t.Fatalf("Could not start responder: %v", err)
	}
	defer cancel()

	req := NewRequester(fmt.Sprintf("http://%s:%d", ip, port))

	doc := etree.NewDocument()
	doc.CreateElement("foo").CreateText("bar")

	response, err := req.Request(*doc)
	if err != nil {
		t.Fatalf("Failed to execute request: %v", err)
	}

	element := response.FindElement("/foo")
	if element == nil {
		t.Fatal("Could not find `foo` element.")
	}

	if element.Text() != `bar` {
		t.Fatalf("Expected text `bar` in element `foo` but got `%s`.", element.Text())
	}
}