-
Notifications
You must be signed in to change notification settings - Fork 1
/
system_test.go
123 lines (100 loc) · 3.59 KB
/
system_test.go
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
package main
import (
"bytes"
"fmt"
"os"
"os/exec"
"strings"
"syscall"
"testing"
"github.com/stretchr/testify/require"
)
type cmd struct {
in string
}
func newCmd() *cmd { return &cmd{} }
func (c *cmd) stdIn(in string) *cmd { c.in = in; return c }
func (c *cmd) run(name string, args ...string) (int, string, string) {
cmd := exec.Command(name, args...)
var stdOut, stdErr bytes.Buffer
cmd.Stdout = &stdOut
cmd.Stderr = &stdErr
if len(c.in) > 0 {
cmd.Stdin = strings.NewReader(c.in)
}
_ = cmd.Run()
status := cmd.ProcessState.Sys().(syscall.WaitStatus)
strOut := stdOut.String()
strErr := stdErr.String()
return status.ExitStatus(), strOut, strErr
}
func build(t *testing.T) {
var status int
status, _, _ = newCmd().run("make", "build")
require.Zero(t, status)
status, _, _ = newCmd().run("ls", "feeder")
require.Zero(t, status)
}
func TestSystem(t *testing.T) {
build(t)
feedsFile := "./test-data/feeds.yml"
feeds := `- name: The Go Blog
url: https://blog.golang.org/blog/feed.atom
disabled: false
`
err := os.WriteFile(feedsFile, []byte(feeds), 0677)
require.Nil(t, err)
var status int
var stdOut, stdErr string
//
// feeder -config test-data/subscribe-cfg.yml -subscribe https://blog.golang.org/
//
status, stdOut, stdErr = newCmd().
run("./feeder",
"-config", "test-data/subscribe-cfg.yml",
"-subscribe", "https://blog.golang.org/",
)
fmt.Printf(">> feeder -config test-data/subscribe-cfg.yml -subscribe https://blog.golang.org/ stdout:\n%s\n", stdOut)
fmt.Printf(">> feeder -config test-data/subscribe-cfg.yml -subscribe https://blog.golang.org/ stderr:\n%s\n", stdErr)
require.Zero(t, status)
fs, err := readFeedsConfig("test-data/feeds.yml")
require.Nil(t, err)
require.Len(t, fs, 1)
expected0 := &ConfigFeed{Name: "The Go Blog", URL: "https://blog.golang.org/blog/feed.atom"}
require.Equal(t, expected0, fs[0])
//
// feeder -config test-data/subscribe-cfg.yml -subscribe https://www.kottke.org/
//
status, stdOut, stdErr = newCmd().
run("./feeder",
"-config", "test-data/subscribe-cfg.yml",
"-subscribe", "https://www.kottke.org",
)
fmt.Printf(">> feeder -config test-data/subscribe-cfg.yml -subscribe https://www.kottke.org/ stdout:\n%s\n", stdOut)
fmt.Printf(">> feeder -config test-data/subscribe-cfg.yml -subscribe https://www.kottke.org/ stderr:\n%s\n", stdErr)
require.Zero(t, status)
fs, err = readFeedsConfig("test-data/feeds.yml")
require.Nil(t, err)
require.Len(t, fs, 2)
expected1 := &ConfigFeed{Name: "kottke.org - home of fine hypertext products", URL: "http://feeds.kottke.org/main"}
require.Equal(t, expected0, fs[0])
require.Equal(t, expected1, fs[1])
//
// feeder -config test-data/subscribe-cfg.yml -subscribe https://www.youtube.com/channel/UCe1Aj6VEO299Yq4WkXdoD3Q
//
status, stdOut, stdErr = newCmd().
run("./feeder",
"-config", "test-data/subscribe-cfg.yml",
"-subscribe", "https://www.youtube.com/channel/UCe1Aj6VEO299Yq4WkXdoD3Q",
)
fmt.Printf(">> feeder -config test-data/subscribe-cfg.yml -subscribe https://www.youtube.com/channel/UCe1Aj6VEO299Yq4WkXdoD3Q stdout:\n%s\n", stdOut)
fmt.Printf(">> feeder -config test-data/subscribe-cfg.yml -subscribe https://www.youtube.com/channel/UCe1Aj6VEO299Yq4WkXdoD3Q stderr:\n%s\n", stdErr)
require.Zero(t, status)
fs, err = readFeedsConfig("test-data/feeds.yml")
require.Nil(t, err)
require.Len(t, fs, 3)
expected2 := &ConfigFeed{Name: "Alexandre Chappel - YouTube", URL: "https://www.youtube.com/feeds/videos.xml?channel_id=UCe1Aj6VEO299Yq4WkXdoD3Q"}
require.Equal(t, expected0, fs[0])
require.Equal(t, expected1, fs[1])
require.Equal(t, expected2, fs[2])
}