Skip to content

Commit 7e2a251

Browse files
author
Andrew Orals
committed
Write end-to-end tests
1 parent 7840fe5 commit 7e2a251

File tree

4 files changed

+439
-21
lines changed

4 files changed

+439
-21
lines changed

dgrep/main.go

+1-4
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,10 @@ type Args struct {
1313
Query string
1414
}
1515

16-
const kListenPort = 1233
17-
const kRpcPort = "1234"
18-
1916
var address = flag.String("a", "localhost", "The address of the log servent")
2017

2118
func query(q string, addr string) {
22-
c, err := rpc.DialHTTP("tcp", addr + ":" + kRpcPort)
19+
c, err := rpc.DialHTTP("tcp", addr)
2320
if err != nil {
2421
log.Fatal("dialing:", err)
2522
}

logservent/main.go

+22-17
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,12 @@ import (
55
"flag"
66
"log"
77
"os"
8-
"os/exec"
9-
"path/filepath"
108
"net"
119
"net/rpc"
1210
"net/http"
1311
"bufio"
1412
"sync"
15-
"errors"
13+
"strings"
1614
"andreworals.com/dlogger/leveled_logger"
1715
"andreworals.com/dlogger/chan_grep"
1816
"github.com/hsfzxjy/go-srpc"
@@ -24,8 +22,6 @@ import (
2422

2523
var logger leveled_logger.LeveledLogger
2624

27-
const rpcPort = "1234"
28-
const kListenPort = 1235
2925
var logDir = flag.String("d", "logs", "log directory")
3026
var debugLevel = flag.Int("v", 1, "verbosity level, 0=off 1=normal 2=debug")
3127
var machineAddrs []string
@@ -39,12 +35,12 @@ type GrepClientRpc string
3935

4036
// RPC from queried log server to log server
4137
// Takes output from grep and sends it over a TCP connection to the caller
42-
func (*LogServerRpc) LoggerQuery(args Args, s *srpc.Session) error {
38+
func (*LogServerRpc) LoggerQuery(args chan_grep.Args, s *srpc.Session) error {
4339
return srpc.S( func() error {
4440
resultsCh := make(chan string)
4541
errCh := make(chan error)
4642

47-
go grepLogs(args, *logDir, resultsCh, errCh)
43+
go chan_grep.GrepLogs(args, *logDir, resultsCh, errCh)
4844

4945
for {
5046
select {
@@ -59,11 +55,12 @@ func (*LogServerRpc) LoggerQuery(args Args, s *srpc.Session) error {
5955
}, s, nil)
6056
}
6157

62-
func serverReader(wg *sync.WaitGroup, args Args, addrStr string, listenPort int, ch chan<- string) {
58+
func serverReader(wg *sync.WaitGroup, args chan_grep.Args, addrStr string, ch chan<- string) {
6359
defer wg.Done()
6460

65-
c, err := rpc.DialHTTP("tcp", addrStr + ":" + rpcPort)
61+
c, err := rpc.DialHTTP("tcp", addrStr)
6662
if err != nil {
63+
logger.PrintfNormal("Could not dial logserver at %s: %s\n", addrStr, err)
6764
return
6865
}
6966
client := srpc.WrapClient(c)
@@ -83,7 +80,7 @@ func done(wg *sync.WaitGroup, doneCh chan<- Nothing, ch chan<- string) {
8380

8481
// RPC from grep client to query log server
8582
// Calls each log server to retrieve the its logs and populates a channel to send back to the grep client over TCP
86-
func (*GrepClientRpc) GrepQuery(args Args, s *srpc.Session) error {
83+
func (*GrepClientRpc) GrepQuery(args chan_grep.Args, s *srpc.Session) error {
8784
logger.PrintfDebug("Received grep query: %s\n", args.Query)
8885
return srpc.S( func() error {
8986
// query the other servers
@@ -92,15 +89,15 @@ func (*GrepClientRpc) GrepQuery(args Args, s *srpc.Session) error {
9289
var wg sync.WaitGroup
9390

9491
// Grep from other servers
95-
for i, addrStr := range machineAddrs {
92+
for _, addr := range machineAddrs {
9693
wg.Add(1)
97-
go serverReader(&wg, args, addrStr, kListenPort + i, grepResultsCh)
94+
go serverReader(&wg, args, addr, grepResultsCh)
9895
}
9996
// Grep from this server
10097
wg.Add(1)
10198
go func(wgroup *sync.WaitGroup) {
10299
defer wgroup.Done()
103-
grepLogs(args, grepResultsCh, nil)
100+
chan_grep.GrepLogs(args, *logDir, grepResultsCh, nil)
104101
logger.PrintfDebug("grepLogs done\n")
105102
}(&wg)
106103
// Call back when the grep calls return
@@ -132,15 +129,20 @@ func readMachineFile(fileName string) {
132129

133130
lines := bufio.NewScanner(file) // use default ScanLines
134131
for lines.Scan() {
135-
machineAddrs = append(machineAddrs, lines.Text())
132+
str := lines.Text()
133+
addr_tmp := strings.Split(str, ":")
134+
if len(addr_tmp) != 2 {
135+
fmt.Fprintf(os.Stderr, "Invalid address or port: %s\nFormat is <address>:<port>\n", str)
136+
}
137+
machineAddrs = append(machineAddrs, str)
136138
}
137139

138140
logger.PrintfDebug("Addresses: %v\n", machineAddrs)
139141
}
140142

141143
func usage() {
142144
fmt.Fprintf(os.Stderr,
143-
"Usage: %s [-d <log directory>] [-v <integer debug level>] <machine file>\n",
145+
"Usage: %s [-d <log directory>] [-v <integer debug level>] <port> <machine file>\n",
144146
os.Args[0])
145147
flag.PrintDefaults()
146148
}
@@ -152,9 +154,12 @@ func main() {
152154
logger.SetLevel(leveled_logger.LogLevel(*debugLevel))
153155
defer logger.AutoPrefix("main: ")()
154156

155-
if flag.NArg() == 1 {
156-
readMachineFile(flag.Args()[0])
157+
if flag.NArg() != 2 {
158+
usage()
159+
os.Exit(1)
157160
}
161+
rpcPort := flag.Args()[0]
162+
readMachineFile(flag.Args()[1])
158163

159164
rpc.Register(new(GrepClientRpc))
160165
rpc.Register(new(LogServerRpc))

test_full.sh

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
set -e
2+
3+
go test andreworals.com/dlogger/chan_grep
4+
5+
go build -o ./dgrep/dgrep ./dgrep/main.go
6+
go build -o ./logservent/logservent ./logservent/main.go
7+
8+
python3 ./tests/test_dgrep.py ./logservent/logservent ./dgrep/dgrep
9+

0 commit comments

Comments
 (0)