summaryrefslogtreecommitdiff
path: root/tests/papod.go
diff options
context:
space:
mode:
Diffstat (limited to 'tests/papod.go')
-rw-r--r--tests/papod.go560
1 files changed, 340 insertions, 220 deletions
diff --git a/tests/papod.go b/tests/papod.go
index 2d908f5..5f07b43 100644
--- a/tests/papod.go
+++ b/tests/papod.go
@@ -4,14 +4,146 @@ import (
"bufio"
"database/sql"
"errors"
+ "fmt"
+ "os"
"strings"
- // "q"
+ "golite"
+ "guuid"
g "gobang"
)
+func test_defaultPrefix() {
+ g.TestStart("defaultPrefix")
+
+ g.Testing("the defaultPrefix is valid", func() {
+ g.TErrorIf(g.ValidateSQLTablePrefix(defaultPrefix))
+ })
+}
+
+func test_tryRollback() {
+ // FIXME
+}
+
+func test_inTx() {
+ // FIXME
+}
+
+func test_createTables() {
+ return
+ g.TestStart("createTables()")
+
+ db, err := sql.Open(golite.DriverName, ":memory:")
+ g.TErrorIf(err)
+ defer db.Close()
+
+
+ g.Testing("tables exist afterwards", func() {
+ const tmpl_read = `
+ SELECT id FROM "%s_events" LIMIT 1;
+ `
+ qRead := fmt.Sprintf(tmpl_read, defaultPrefix)
+
+ _, err := db.Exec(qRead)
+ g.TErrorNil(err)
+
+ err = createTables(db, defaultPrefix)
+ g.TErrorIf(err)
+
+ _, err = db.Exec(qRead)
+ g.TErrorIf(err)
+ })
+
+ g.Testing("we can do it multiple times", func() {
+ g.TErrorIf(g.SomeError(
+ createTables(db, defaultPrefix),
+ createTables(db, defaultPrefix),
+ createTables(db, defaultPrefix),
+ ))
+ })
+}
+
+func test_addNetworkStmt() {
+ return
+ g.TestStart("addNetworkStmt()")
+
+ const (
+ prefix = defaultPrefix
+ )
+
+ db, err := sql.Open(golite.DriverName, ":memory:")
+ g.TErrorIf(err)
+ g.TErrorIf(createTables(db, prefix))
+
+ addNetwork, addNetworkClose, addNetworkErr := addNetworkStmt(db, prefix)
+ g.TErrorIf(addNetworkErr)
+ defer g.SomeFnError(
+ addNetworkClose,
+ )
+
+
+ g.Testing("we can't add the same network twice", func() {
+ // FIXME
+ })
+
+ g.Testing("a user can create multiple networks", func() {
+ userID := guuid.New()
+ newNetwork := newNetworkT{}
+
+ network, err := addNetwork(userID, newNetwork)
+ g.TErrorIf(err)
+
+ g.TAssertEqual(network.createdBy, userID)
+ })
+}
+
+func test_addChannelStmt() {
+ return // FIXME
+ g.TestStart("addChannelStmt()")
+
+ const (
+ prefix = defaultPrefix
+ )
+
+ db, err := sql.Open(golite.DriverName, ":memory:")
+ g.TErrorIf(err)
+ g.TErrorIf(createTables(db, prefix))
+
+ addChannel, addChannelClose, addChannelErr := addChannelStmt(db, prefix)
+ channels, channelsClose, channelsErr := channelsStmt(db, prefix)
+ g.TErrorIf(g.SomeError(
+ addChannelErr,
+ channelsErr,
+ ))
+ defer g.SomeFnError(
+ addChannelClose,
+ channelsClose,
+ db.Close,
+ )
+
+ collect := func(workspaceID guuid.UUID) []channelT {
+ rows, err := channels(workspaceID)
+ g.TErrorIf(err)
+
+ collected := []channelT{}
+ err = channelEach(rows, func(channel channelT) error {
+ collected = append(collected, channel)
+ return nil
+ })
+ g.TErrorIf(err)
+ return collected
+ }
+
+
+ if true {
+ g.TAssertEqual(addChannel, collect)
+ }
+ // private channels one is not a part of doesn't show up
+ // channels only from the same workspace
+}
+
func test_initDB() {
g.TestStart("initDB()")
@@ -39,50 +171,50 @@ func test_initDB() {
*/
}
-func test_SplitOnCRLF() {
- type tableT struct {
- input string
+func test_splitOnCRLF() {
+ type tableT struct{
+ input string
expected []string
}
- table := []tableT {
+ table := []tableT{
{
"",
nil,
},
{
"\r\n",
- []string { "" },
+ []string{ "" },
},
{
"abc\r\n",
- []string { "abc" },
+ []string{ "abc" },
},
{
"abc\r\n ",
- []string { "abc" },
+ []string{ "abc" },
},
{
"abc\r\n \r\n",
- []string { "abc", " " },
+ []string{ "abc", " " },
},
{
" \r\n \r\n",
- []string { " ", " " },
+ []string{ " ", " " },
},
{
"aaa\r\nbbb\r\nccc\r\n",
- []string { "aaa", "bbb", "ccc" },
+ []string{ "aaa", "bbb", "ccc" },
},
{
"\r\nsplit \r \n CRLF\r\n\r\n",
- []string { "", "split \r \n CRLF", "" },
+ []string{ "", "split \r \n CRLF", "" },
},
}
for _, entry := range table {
var given []string
scanner := bufio.NewScanner(strings.NewReader(entry.input))
- scanner.Split(SplitOnCRLF)
+ scanner.Split(splitOnCRLF)
for scanner.Scan() {
given = append(given, scanner.Text())
}
@@ -93,19 +225,19 @@ func test_SplitOnCRLF() {
}
}
-func test_SplitOnRawMessage() {
- type tableT struct {
+func test_splitOnRawMessage() {
+ type tableT struct{
input string
expected []string
}
- table := []tableT {
+ table := []tableT{
{
"first message\r\nsecond message\r\n",
- []string { "first message", "second message" },
+ []string{ "first message", "second message" },
},
{
"message 1\r\n\r\nmessage 2\r\n\r\nignored",
- []string { "message 1", "message 2" },
+ []string{ "message 1", "message 2" },
},
}
@@ -113,7 +245,7 @@ func test_SplitOnRawMessage() {
for _, entry := range table {
var given []string
scanner := bufio.NewScanner(strings.NewReader(entry.input))
- scanner.Split(SplitOnRawMessage)
+ scanner.Split(splitOnRawMessage)
for scanner.Scan() {
given = append(given, scanner.Text())
}
@@ -124,333 +256,333 @@ func test_SplitOnRawMessage() {
}
}
-func test_ParseMessageParams() {
- type tableT struct {
- input string
- expected MessageParams
+func test_parseMessageParams() {
+ type tableT struct{
+ input string
+ expected messageParamsT
}
- table := []tableT {
+ table := []tableT{
{
"",
- MessageParams {
- Middle: []string { },
- Trailing: "",
+ messageParamsT{
+ middle: []string { },
+ trailing: "",
},
},
{
" ",
- MessageParams {
- Middle: []string { },
- Trailing: "",
+ messageParamsT{
+ middle: []string { },
+ trailing: "",
},
},
{
" :",
- MessageParams {
- Middle: []string { },
- Trailing: "",
+ messageParamsT{
+ middle: []string { },
+ trailing: "",
},
},
{
" : ",
- MessageParams {
- Middle: []string { },
- Trailing: " ",
+ messageParamsT{
+ middle: []string { },
+ trailing: " ",
},
},
{
": ",
- MessageParams {
- Middle: []string { ":" },
- Trailing: "",
+ messageParamsT{
+ middle: []string { ":" },
+ trailing: "",
},
},
{
": ",
- MessageParams {
- Middle: []string { ":" },
- Trailing: "",
+ messageParamsT{
+ middle: []string { ":" },
+ trailing: "",
},
},
{
" : ",
- MessageParams {
- Middle: []string { },
- Trailing: " ",
+ messageParamsT{
+ middle: []string { },
+ trailing: " ",
},
},
{
" :",
- MessageParams {
- Middle: []string { },
- Trailing: "",
+ messageParamsT{
+ middle: []string { },
+ trailing: "",
},
},
{
" :",
- MessageParams {
- Middle: []string { },
- Trailing: "",
+ messageParamsT{
+ middle: []string { },
+ trailing: "",
},
},
{
"a",
- MessageParams {
- Middle: []string { "a" },
- Trailing: "",
+ messageParamsT{
+ middle: []string { "a" },
+ trailing: "",
},
},
{
"ab",
- MessageParams {
- Middle: []string { "ab" },
- Trailing: "",
+ messageParamsT{
+ middle: []string { "ab" },
+ trailing: "",
},
},
{
"a b",
- MessageParams {
- Middle: []string { "a", "b" },
- Trailing: "",
+ messageParamsT{
+ middle: []string { "a", "b" },
+ trailing: "",
},
},
{
"a b c",
- MessageParams {
- Middle: []string { "a", "b", "c" },
- Trailing: "",
+ messageParamsT{
+ middle: []string { "a", "b", "c" },
+ trailing: "",
},
},
{
"a b:c",
- MessageParams {
- Middle: []string { "a", "b:c" },
- Trailing: "",
+ messageParamsT{
+ middle: []string { "a", "b:c" },
+ trailing: "",
},
},
{
"a b:c:",
- MessageParams {
- Middle: []string { "a", "b:c:" },
- Trailing: "",
+ messageParamsT{
+ middle: []string { "a", "b:c:" },
+ trailing: "",
},
},
{
"a b :c",
- MessageParams {
- Middle: []string { "a", "b" },
- Trailing: "c",
+ messageParamsT{
+ middle: []string { "a", "b" },
+ trailing: "c",
},
},
{
"a b :c:",
- MessageParams {
- Middle: []string { "a", "b" },
- Trailing: "c:",
+ messageParamsT{
+ middle: []string { "a", "b" },
+ trailing: "c:",
},
},
{
"a b :c ",
- MessageParams {
- Middle: []string { "a", "b" },
- Trailing: "c ",
+ messageParamsT{
+ middle: []string { "a", "b" },
+ trailing: "c ",
},
},
{
"a b : c",
- MessageParams {
- Middle: []string { "a", "b" },
- Trailing: " c",
+ messageParamsT{
+ middle: []string { "a", "b" },
+ trailing: " c",
},
},
{
"a b : c ",
- MessageParams {
- Middle: []string { "a", "b" },
- Trailing: " c ",
+ messageParamsT{
+ middle: []string { "a", "b" },
+ trailing: " c ",
},
},
{
"a b : c :",
- MessageParams {
- Middle: []string { "a", "b" },
- Trailing: " c :",
+ messageParamsT{
+ middle: []string { "a", "b" },
+ trailing: " c :",
},
},
{
"a b : c : ",
- MessageParams {
- Middle: []string { "a", "b" },
- Trailing: " c : ",
+ messageParamsT{
+ middle: []string { "a", "b" },
+ trailing: " c : ",
},
},
{
"a b : c :d",
- MessageParams {
- Middle: []string { "a", "b" },
- Trailing: " c :d",
+ messageParamsT{
+ middle: []string { "a", "b" },
+ trailing: " c :d",
},
},
{
"a b : c :d ",
- MessageParams {
- Middle: []string { "a", "b" },
- Trailing: " c :d ",
+ messageParamsT{
+ middle: []string { "a", "b" },
+ trailing: " c :d ",
},
},
{
"a b : c : d ",
- MessageParams {
- Middle: []string { "a", "b" },
- Trailing: " c : d ",
+ messageParamsT{
+ middle: []string { "a", "b" },
+ trailing: " c : d ",
},
},
}
for _, entry := range table {
- given := ParseMessageParams(entry.input)
+ given := parseMessageParams(entry.input)
g.TAssertEqual(given, entry.expected)
}
}
-func test_ParseMessage() {
- type tableTOK struct {
- input string
- expected Message
+func test_parseMessage() {
+ type tableTOK struct{
+ input string
+ expected messageT
}
tableOK := []tableTOK {{
"NICK joebloe ",
- Message {
- Prefix: "",
- Command: "NICK",
- Params: MessageParams {
- Middle: []string { "joebloe" },
- Trailing: "",
+ messageT{
+ prefix: "",
+ command: "NICK",
+ params: messageParamsT{
+ middle: []string { "joebloe" },
+ trailing: "",
},
- Raw: "NICK joebloe ",
+ raw: "NICK joebloe ",
},
}, {
"USER joebloe 0.0.0.0 joe :Joe Bloe",
- Message {
- Prefix: "",
- Command: "USER",
- Params: MessageParams {
- Middle: []string {
+ messageT{
+ prefix: "",
+ command: "USER",
+ params: messageParamsT{
+ middle: []string {
"joebloe", "0.0.0.0", "joe",
},
- Trailing: "Joe Bloe",
+ trailing: "Joe Bloe",
},
- Raw: "USER joebloe 0.0.0.0 joe :Joe Bloe",
+ raw: "USER joebloe 0.0.0.0 joe :Joe Bloe",
},
}, {
":pre USER joebloe 0.0.0.0 joe :Joe Bloe",
- Message {
- Prefix: "pre",
- Command: "USER",
- Params: MessageParams {
- Middle: []string {
+ messageT{
+ prefix: "pre",
+ command: "USER",
+ params: messageParamsT{
+ middle: []string {
"joebloe", "0.0.0.0", "joe",
},
- Trailing: "Joe Bloe",
+ trailing: "Joe Bloe",
},
- Raw: ":pre USER joebloe 0.0.0.0 joe :Joe Bloe",
+ raw: ":pre USER joebloe 0.0.0.0 joe :Joe Bloe",
},
}, {
":pre USER joebloe 0.0.0.0 joe : Joe Bloe ",
- Message {
- Prefix: "pre",
- Command: "USER",
- Params: MessageParams {
- Middle: []string {
+ messageT{
+ prefix: "pre",
+ command: "USER",
+ params: messageParamsT{
+ middle: []string {
"joebloe", "0.0.0.0", "joe",
},
- Trailing: " Joe Bloe ",
+ trailing: " Joe Bloe ",
},
- Raw: ":pre USER joebloe 0.0.0.0 joe : Joe Bloe ",
+ raw: ":pre USER joebloe 0.0.0.0 joe : Joe Bloe ",
},
}, {
":pre USER joebloe: 0:0:0:1 joe::a: : Joe Bloe ",
- Message {
- Prefix: "pre",
- Command: "USER",
- Params: MessageParams {
- Middle: []string {
+ messageT{
+ prefix: "pre",
+ command: "USER",
+ params: messageParamsT{
+ middle: []string {
"joebloe:", "0:0:0:1", "joe::a:",
},
- Trailing: " Joe Bloe ",
+ trailing: " Joe Bloe ",
},
- Raw: ":pre USER joebloe: 0:0:0:1 joe::a: : Joe Bloe ",
+ raw: ":pre USER joebloe: 0:0:0:1 joe::a: : Joe Bloe ",
},
}, {
":pre USER :Joe Bloe",
- Message {
- Prefix: "pre",
- Command: "USER",
- Params: MessageParams {
- Middle: []string { },
- Trailing: "Joe Bloe",
+ messageT{
+ prefix: "pre",
+ command: "USER",
+ params: messageParamsT{
+ middle: []string { },
+ trailing: "Joe Bloe",
},
- Raw: ":pre USER :Joe Bloe",
+ raw: ":pre USER :Joe Bloe",
},
}, {
":pre USER : Joe Bloe",
- Message {
- Prefix: "pre",
- Command: "USER",
- Params: MessageParams {
- Middle: []string { },
- Trailing: " Joe Bloe",
+ messageT{
+ prefix: "pre",
+ command: "USER",
+ params: messageParamsT{
+ middle: []string { },
+ trailing: " Joe Bloe",
},
- Raw: ":pre USER : Joe Bloe",
+ raw: ":pre USER : Joe Bloe",
},
}, {
":pre USER : Joe Bloe",
- Message {
- Prefix: "pre",
- Command: "USER",
- Params: MessageParams {
- Middle: []string { },
- Trailing: " Joe Bloe",
+ messageT{
+ prefix: "pre",
+ command: "USER",
+ params: messageParamsT{
+ middle: []string { },
+ trailing: " Joe Bloe",
},
- Raw: ":pre USER : Joe Bloe",
+ raw: ":pre USER : Joe Bloe",
},
}, {
":pre USER : ",
- Message {
- Prefix: "pre",
- Command: "USER",
- Params: MessageParams {
- Middle: []string { },
- Trailing: " ",
+ messageT{
+ prefix: "pre",
+ command: "USER",
+ params: messageParamsT{
+ middle: []string { },
+ trailing: " ",
},
- Raw: ":pre USER : ",
+ raw: ":pre USER : ",
},
}, {
":pre USER :",
- Message {
- Prefix: "pre",
- Command: "USER",
- Params: MessageParams {
- Middle: []string { },
- Trailing: "",
+ messageT{
+ prefix: "pre",
+ command: "USER",
+ params: messageParamsT{
+ middle: []string { },
+ trailing: "",
},
- Raw: ":pre USER :",
+ raw: ":pre USER :",
},
}}
for _, entry := range tableOK {
- given, err := ParseMessage(entry.input)
+ given, err := parseMessage(entry.input)
g.TErrorIf(err)
g.TAssertEqual(given, entry.expected)
}
- type tableErrorT struct {
- input string
+ type tableErrorT struct{
+ input string
expected error
}
parseErr := errors.New("Can't parse message")
- tableError := []tableErrorT {
+ tableError := []tableErrorT{
{
":pre",
parseErr,
@@ -466,59 +598,47 @@ func test_ParseMessage() {
}
for _, entry := range tableError {
- _, given := ParseMessage(entry.input)
+ _, given := parseMessage(entry.input)
g.TAssertEqual(given, entry.expected)
}
}
-func test_InitMigrations() {
- const query = `SELECT filename FROM migrations;`
-
- db, err := sql.Open("sqlite3", ":memory:")
- g.FatalIf(err)
-
- _, err = db.Query(query)
- g.TAssertEqual(err.Error(), "no such table: migrations")
- for i := 0; i < 5; i++ {
- InitMigrations(db)
- rows, err := db.Query(query)
- g.FatalIf(err)
- g.TAssertEqual(rows.Next(), false)
- g.FatalIf(rows.Err())
+func dumpQueries() {
+ queries := []struct{name string; fn func(string) queryT}{
+ { "createTables", createTablesSQL },
+ { "addNetwork", addNetworkSQL },
+ { "addChannel", addChannelSQL },
+ { "channels", channelsSQL },
+ { "allAfter", allAfterSQL },
+ { "addEvent", addEventSQL },
}
-}
-
-func test_PendingMigrations() {
- db, err := sql.Open("sqlite3", ":memory:")
- g.FatalIf(err)
-
- InitMigrations(db)
- pending1 := PendingMigrations(db)
- pending2 := PendingMigrations(db)
-
- g.TAssertEqual(pending1, pending2)
-}
-
-func test_RunMigrations() {
- db, err := sql.Open("sqlite3", ":memory:")
- g.FatalIf(err)
-
- for i := 0; i < 5; i++ {
- RunMigrations(db)
+ for _, query := range queries {
+ q := query.fn(defaultPrefix)
+ fmt.Printf("\n-- %s.sql:", query.name)
+ fmt.Printf("\n-- write:%s\n", q.write)
+ fmt.Printf("\n-- read:%s\n", q.read)
}
}
func MainTest() {
+ if os.Getenv("TESTING_DUMP_SQL_QUERIES") != "" {
+ dumpQueries()
+ return
+ }
+
+ g.Init()
+ test_defaultPrefix()
+ test_tryRollback()
+ test_inTx()
+ test_createTables()
+ test_addNetworkStmt()
+ test_addChannelStmt()
test_initDB()
- test_SplitOnCRLF()
- test_SplitOnRawMessage()
- test_ParseMessageParams()
- test_ParseMessage()
-
- // { "TestInitMigrations", TestInitMigrations },
- // { "TestPendingMigrations", TestPendingMigrations },
- // { "TestRunMigrations", TestRunMigrations },
+ test_splitOnCRLF()
+ test_splitOnRawMessage()
+ test_parseMessageParams()
+ test_parseMessage()
}