~emersion/#1291586

success

Revert "conn: fix goroutine leak"

b0d2e0a1b4 — Simon Ser

Owner
~emersion
Created
7 months ago
Updated
7 months ago
Build manifest
view manifest »

Tasks

view log »
build view log »
setup-postgresql view log »
test view log »
gofmt view log »
go to bottom »
go to top »
setup
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
[#1291586] 2024/08/01 18:25:26 Booting image alpine/latest (default) on port 22732
[#1291586] 2024/08/01 18:25:26 Waiting for guest to settle
[#1291586] 2024/08/01 18:25:35 Sending tasks
[#1291586] 2024/08/01 18:25:37 Sending build environment
[#1291586] 2024/08/01 18:25:37 Installing packages
Warning: Permanently added '[localhost]:22732' (ED25519) to the list of known hosts.
fetch http://dl-cdn.alpinelinux.org/alpine/v3.20/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.20/community/x86_64/APKINDEX.tar.gz
OK: 463 MiB in 140 packages
Warning: Permanently added '[localhost]:22732' (ED25519) to the list of known hosts.
(1/12) Installing go (1.22.5-r0)
(2/12) Installing postgresql-common (1.2-r1)
Executing postgresql-common-1.2-r1.pre-install
(3/12) Installing lz4-libs (1.9.4-r5)
(4/12) Installing libpq (16.3-r0)
(5/12) Installing postgresql16-client (16.3-r0)
(6/12) Installing icu-data-en (74.2-r0)
Executing icu-data-en-74.2-r0.post-install
*
* If you need ICU with non-English locales and legacy charset support, install
* package icu-data-full.
*
(7/12) Installing icu-libs (74.2-r0)
(8/12) Installing libxml2 (2.12.7-r0)
(9/12) Installing postgresql16 (16.3-r0)
Executing postgresql16-16.3-r0.post-install
*
* If you want to use JIT in PostgreSQL, install postgresql16-jit or
* postgresql-jit (if you didn't install specific major version of postgresql).
*
(10/12) Installing postgresql-common-openrc (1.2-r1)
(11/12) Installing postgresql16-openrc (16.3-r0)
(12/12) Installing scdoc (1.11.3-r0)
Executing busybox-1.36.1-r29.trigger
Executing postgresql-common-1.2-r1.trigger
* Setting postgresql16 as the default version
OK: 672 MiB in 152 packages
[#1291586] 2024/08/01 18:25:40 Cloning repositories
Cloning into 'soju'...
+ cd soju
+ git checkout -q b0d2e0a1b4d00a7876e2a928f2cd05d66df30c7f
+ cd soju
+ git submodule update --init --recursive
[#1291586] 2024/08/01 18:25:42 Running task build
[#1291586] 2024/08/01 18:26:32 Running task setup-postgresql
[#1291586] 2024/08/01 18:26:34 Running task test
[#1291586] 2024/08/01 18:26:39 Running task gofmt
build
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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
+ cd soju
+ go build -v ./...
go: downloading github.com/pires/go-proxyproto v0.7.0
go: downloading github.com/prometheus/client_golang v1.19.1
go: downloading gopkg.in/irc.v4 v4.0.0
go: downloading golang.org/x/crypto v0.23.0
go: downloading git.sr.ht/~emersion/go-scfg v0.0.0-20240128091534-2ae16e782082
go: downloading git.sr.ht/~emersion/go-sqlite3-fts5 v0.0.0-20240124102820-f3a72e8b79b1
go: downloading github.com/lib/pq v1.10.9
go: downloading github.com/mattn/go-sqlite3 v1.14.22
go: downloading git.sr.ht/~sircmpwn/go-bare v0.0.0-20210406120253-ab86bc2846d9
go: downloading github.com/SherClockHolmes/webpush-go v1.3.0
go: downloading github.com/emersion/go-sasl v0.0.0-20231106173351-e73c9f7bad43
go: downloading golang.org/x/time v0.5.0
go: downloading nhooyr.io/websocket v1.8.11
go: downloading github.com/beorn7/perks v1.0.1
go: downloading github.com/cespare/xxhash/v2 v2.3.0
go: downloading github.com/prometheus/client_model v0.6.1
go: downloading github.com/prometheus/common v0.53.0
go: downloading github.com/prometheus/procfs v0.13.0
go: downloading google.golang.org/protobuf v1.34.1
go: downloading golang.org/x/term v0.20.0
go: downloading github.com/golang-jwt/jwt v3.2.2+incompatible
go: downloading golang.org/x/sys v0.20.0
internal/goarch
internal/unsafeheader
internal/abi
internal/cpu
internal/bytealg
internal/chacha8rand
internal/coverage/rtcov
internal/godebugs
internal/goexperiment
internal/goos
runtime/internal/atomic
runtime/internal/math
runtime/internal/sys
runtime/internal/syscall
internal/race
sync/atomic
runtime
unicode
unicode/utf8
math/bits
math
internal/itoa
cmp
slices
crypto/internal/alias
crypto/subtle
crypto/internal/boring/sig
container/list
unicode/utf16
vendor/golang.org/x/crypto/cryptobyte/asn1
internal/nettrace
vendor/golang.org/x/crypto/internal/alias
github.com/lib/pq/oid
encoding
log/internal
google.golang.org/protobuf/internal/flags
google.golang.org/protobuf/internal/set
nhooyr.io/websocket/internal/util
internal/reflectlite
sync
internal/testlog
runtime/cgo
errors
io
bytes
strconv
reflect
sort
internal/oserror
syscall
encoding/binary
encoding/base64
internal/fmtsort
internal/safefilepath
path
strings
internal/syscall/unix
time
internal/syscall/execenv
bufio
regexp/syntax
internal/poll
io/fs
context
regexp
os
embed
git.sr.ht/~emersion/go-sqlite3-fts5/internal
fmt
golang.org/x/time/rate
gopkg.in/irc.v4
codeberg.org/emersion/soju/xirc
database/sql/driver
database/sql
hash
crypto
crypto/cipher
crypto/internal/boring
crypto/sha1
crypto/sha256
crypto/sha512
net/url
github.com/mattn/go-sqlite3
crypto/md5
crypto/aes
crypto/des
crypto/internal/edwards25519/field
crypto/internal/nistec/fiat
crypto/internal/nistec
crypto/internal/randutil
crypto/ecdh
internal/bisect
internal/godebug
math/rand
math/big
crypto/elliptic
crypto/internal/bigmod
crypto/internal/boring/bbig
encoding/asn1
vendor/golang.org/x/crypto/cryptobyte
crypto/ecdsa
crypto/internal/edwards25519
crypto/rand
crypto/ed25519
crypto/hmac
crypto/rc4
crypto/rsa
crypto/dsa
encoding/hex
crypto/x509/pkix
encoding/pem
vendor/golang.org/x/net/dns/dnsmessage
internal/singleflight
internal/intern
net/netip
net
path/filepath
crypto/x509
vendor/golang.org/x/crypto/chacha20
vendor/golang.org/x/crypto/internal/poly1305
vendor/golang.org/x/sys/cpu
vendor/golang.org/x/crypto/chacha20poly1305
vendor/golang.org/x/crypto/hkdf
crypto/tls
github.com/lib/pq/scram
io/ioutil
os/user
github.com/lib/pq
encoding/json
log
compress/flate
hash/crc32
compress/gzip
vendor/golang.org/x/text/transform
vendor/golang.org/x/text/unicode/bidi
vendor/golang.org/x/text/secure/bidirule
vendor/golang.org/x/text/unicode/norm
vendor/golang.org/x/net/idna
net/textproto
vendor/golang.org/x/net/http/httpguts
vendor/golang.org/x/net/http/httpproxy
vendor/golang.org/x/net/http2/hpack
mime
mime/quotedprintable
mime/multipart
net/http/httptrace
net/http/internal
net/http/internal/ascii
net/http
expvar
github.com/beorn7/perks/quantile
github.com/cespare/xxhash/v2
hash/fnv
google.golang.org/protobuf/internal/detrand
google.golang.org/protobuf/internal/errors
google.golang.org/protobuf/encoding/protowire
google.golang.org/protobuf/internal/pragma
google.golang.org/protobuf/reflect/protoreflect
google.golang.org/protobuf/internal/descfmt
google.golang.org/protobuf/internal/descopts
google.golang.org/protobuf/internal/editiondefaults
go/token
google.golang.org/protobuf/internal/strs
google.golang.org/protobuf/internal/encoding/text
google.golang.org/protobuf/internal/encoding/defval
google.golang.org/protobuf/internal/encoding/messageset
google.golang.org/protobuf/internal/genid
google.golang.org/protobuf/internal/order
google.golang.org/protobuf/reflect/protoregistry
google.golang.org/protobuf/runtime/protoiface
google.golang.org/protobuf/proto
google.golang.org/protobuf/internal/filedesc
google.golang.org/protobuf/encoding/prototext
google.golang.org/protobuf/internal/encoding/tag
google.golang.org/protobuf/internal/impl
google.golang.org/protobuf/internal/filetype
google.golang.org/protobuf/internal/version
google.golang.org/protobuf/runtime/protoimpl
google.golang.org/protobuf/types/known/timestamppb
github.com/prometheus/client_model/go
github.com/prometheus/common/model
runtime/metrics
github.com/prometheus/client_golang/prometheus/internal
github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg
google.golang.org/protobuf/encoding/protodelim
github.com/prometheus/common/expfmt
github.com/prometheus/procfs/internal/fs
github.com/prometheus/procfs/internal/util
golang.org/x/sys/unix
github.com/prometheus/procfs
runtime/debug
github.com/prometheus/client_golang/prometheus
github.com/prometheus/client_golang/prometheus/collectors
golang.org/x/crypto/blowfish
golang.org/x/crypto/bcrypt
git.sr.ht/~emersion/go-scfg
codeberg.org/emersion/soju/config
codeberg.org/emersion/soju/identd
git.sr.ht/~sircmpwn/go-bare
flag
github.com/golang-jwt/jwt
golang.org/x/crypto/hkdf
github.com/SherClockHolmes/webpush-go
github.com/emersion/go-sasl
github.com/prometheus/client_golang/prometheus/promauto
nhooyr.io/websocket/internal/errd
nhooyr.io/websocket/internal/xsync
nhooyr.io/websocket
github.com/pires/go-proxyproto
github.com/prometheus/client_golang/prometheus/promhttp
html
internal/lazyregexp
internal/profile
text/tabwriter
runtime/pprof
runtime/trace
net/http/pprof
os/signal
codeberg.org/emersion/soju/cmd/sojuctl
golang.org/x/term
golang.org/x/crypto/ssh/terminal
git.sr.ht/~emersion/go-sqlite3-fts5
codeberg.org/emersion/soju/database
codeberg.org/emersion/soju/auth
codeberg.org/emersion/soju/msgstore/znclog
codeberg.org/emersion/soju/msgstore
codeberg.org/emersion/soju/fileupload
codeberg.org/emersion/soju/cmd/sojudb
codeberg.org/emersion/soju
codeberg.org/emersion/soju/cmd/soju
codeberg.org/emersion/soju/contrib/migrate-db
codeberg.org/emersion/soju/contrib/migrate-logs
codeberg.org/emersion/soju/contrib/znc-import
+ scdoc
setup-postgresql
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
+ sudo /etc/init.d/postgresql start
 * Caching service dependencies ... [ ok ]
 * Creating a new PostgreSQL 16 database cluster ...The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.

Using language tag "en-001-x-icu" for ICU locale "en-001-x-icu".
The database cluster will be initialized with this locale configuration:
  provider:    icu
  ICU locale:  en-001-x-icu
  LC_COLLATE:  C
  LC_CTYPE:    C.UTF-8
  LC_MESSAGES: C
  LC_MONETARY: C
  LC_NUMERIC:  C
  LC_TIME:     C
The default text search configuration will be set to "english".

Data page checksums are enabled.

fixing permissions on existing directory /var/lib/postgresql/16/data ... ok
creating subdirectories ... ok
selecting dynamic shared memory implementation ... posix
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting default time zone ... UTC
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok


Success.

initdb: warning: enabling "trust" authentication for local connections
initdb: hint: You can change this by editing pg_hba.conf or using the option -A, or --auth-local and --auth-host, the next time you run initdb.
 [ ok ]
 * /run/postgresql: creating directory
 * /run/postgresql: correcting owner
 * Starting PostgreSQL 16 ... [ ok ]
+ sudo -u postgres -- createuser build
+ sudo -u postgres -- createdb soju
test
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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
+ cd soju
+ export 'SOJU_TEST_POSTGRES=host=/run/postgresql dbname=soju'
+ SOJU_TEST_POSTGRES='host=/run/postgresql dbname=soju'
+ go test -v ./...
?   	codeberg.org/emersion/soju/auth	[no test files]
?   	codeberg.org/emersion/soju/cmd/soju	[no test files]
?   	codeberg.org/emersion/soju/cmd/sojuctl	[no test files]
?   	codeberg.org/emersion/soju/cmd/sojudb	[no test files]
?   	codeberg.org/emersion/soju/config	[no test files]
=== RUN   TestIsHighlight
=== RUN   TestIsHighlight/noContains
=== RUN   TestIsHighlight/standalone
=== RUN   TestIsHighlight/middle
=== RUN   TestIsHighlight/start
=== RUN   TestIsHighlight/end
=== RUN   TestIsHighlight/inWord
=== RUN   TestIsHighlight/startWord
=== RUN   TestIsHighlight/endWord
=== RUN   TestIsHighlight/underscore
=== RUN   TestIsHighlight/zeroWidthSpace
=== RUN   TestIsHighlight/url
=== RUN   TestIsHighlight/startURL
=== RUN   TestIsHighlight/endURL
=== RUN   TestIsHighlight/parenthesizedURL
=== RUN   TestIsHighlight/afterURL
--- PASS: TestIsHighlight (0.00s)
    --- PASS: TestIsHighlight/noContains (0.00s)
    --- PASS: TestIsHighlight/standalone (0.00s)
    --- PASS: TestIsHighlight/middle (0.00s)
    --- PASS: TestIsHighlight/start (0.00s)
    --- PASS: TestIsHighlight/end (0.00s)
    --- PASS: TestIsHighlight/inWord (0.00s)
    --- PASS: TestIsHighlight/startWord (0.00s)
    --- PASS: TestIsHighlight/endWord (0.00s)
    --- PASS: TestIsHighlight/underscore (0.00s)
    --- PASS: TestIsHighlight/zeroWidthSpace (0.00s)
    --- PASS: TestIsHighlight/url (0.00s)
    --- PASS: TestIsHighlight/startURL (0.00s)
    --- PASS: TestIsHighlight/endURL (0.00s)
    --- PASS: TestIsHighlight/parenthesizedURL (0.00s)
    --- PASS: TestIsHighlight/afterURL (0.00s)
=== RUN   TestServer_broadcast
=== RUN   TestServer_broadcast/sqlite
    server_test.go:29: generating Web push VAPID key pair
    server_test.go:29: starting bouncer for user "soju-test-user"
    server_test.go:29: user "soju-test-user": upstream "testnet": connecting to plain-text server at address "127.0.0.1:34617"
    server_test.go:33: user "soju-test-user": upstream "testnet": new connection
    server_test.go:33: user "soju-test-user": upstream "testnet": sent: CAP LS 302
    server_test.go:33: user "soju-test-user": upstream "testnet": sent: NICK soju-test-user
    server_test.go:33: user "soju-test-user": upstream "testnet": sent: USER soju-test-user 0 * soju-test-user
    server_test.go:33: downstream "pipe": new connection
    server_test.go:33: downstream "pipe": received: PASS soju-test-user
    server_test.go:33: downstream "pipe": received: NICK soju-test-user
    server_test.go:33: downstream "pipe": received: USER soju-test-user/testnet 0 * soju-test-user
    server_test.go:33: user "soju-test-user": upstream "testnet": received: :soju-test-server 001 soju-test-user Welcome!
    server_test.go:29: user "soju-test-user": upstream "testnet": connection registered with nick "soju-test-user"
    server_test.go:33: user "soju-test-user": upstream "testnet": received: :soju-test-server 002 soju-test-user :Your host is soju-test-server
    server_test.go:33: user "soju-test-user": upstream "testnet": received: :soju-test-server 003 soju-test-user :Who cares when the server was created?
    server_test.go:33: user "soju-test-user": upstream "testnet": received: :soju-test-server 004 soju-test-user soju-test-server soju aiwroO OovaimnqpsrtklbeI
    server_test.go:33: user "soju-test-user": upstream "testnet": received: :soju-test-server 422 soju-test-user :No MOTD
    server_test.go:33: user "soju-test-user": upstream "testnet": sent: AWAY :Auto away
    server_test.go:29: downstream "pipe": registration complete for user "soju-test-user"
    server_test.go:33: user "soju-test-user": downstream "pipe": sent: :localhost 001 soju-test-user :Welcome to soju, soju-test-user
    server_test.go:33: user "soju-test-user": downstream "pipe": sent: :localhost 002 soju-test-user :Your host is localhost
    server_test.go:33: user "soju-test-user": downstream "pipe": sent: :localhost 004 soju-test-user localhost soju aiwroO OovaimnqpsrtklbeI
    server_test.go:33: user "soju-test-user": downstream "pipe": sent: :localhost 005 * BOUNCER_NETID=1 CLIENTTAGDENY=* :are supported
    server_test.go:33: user "soju-test-user": downstream "pipe": sent: :localhost 221 soju-test-user +
    server_test.go:33: user "soju-test-user": downstream "pipe": sent: :localhost 422 soju-test-user :Use /motd to read the message of the day
    server_test.go:33: user "soju-test-user": upstream "testnet": sent: AWAY
    server_test.go:33: user "soju-test-user": upstream "testnet": received: :soju-test-server NOTICE soju-test-user :This is a very important server notice.
    server_test.go:33: user "soju-test-user": downstream "pipe": sent: :soju-test-server NOTICE soju-test-user :This is a very important server notice.
    server_test.go:29: shutting down server
    server_test.go:29: waiting for users to finish
    server_test.go:33: user "soju-test-user": downstream "pipe": connection closed
    server_test.go:29: user "soju-test-user": network "testnet": connection error to "irc+insecure://127.0.0.1:34617": failed to handle messages: failed to read IRC command: read tcp 127.0.0.1:45642->127.0.0.1:34617: read: connection reset by peer
    server_test.go:33: user "soju-test-user": upstream "testnet": connection closed
=== RUN   TestServer_broadcast/postgres
    server_test.go:29: generating Web push VAPID key pair
    server_test.go:29: starting bouncer for user "soju-test-user"
    server_test.go:29: user "soju-test-user": upstream "testnet": connecting to plain-text server at address "127.0.0.1:34833"
    server_test.go:33: user "soju-test-user": upstream "testnet": new connection
    server_test.go:33: user "soju-test-user": upstream "testnet": sent: CAP LS 302
    server_test.go:33: user "soju-test-user": upstream "testnet": sent: NICK soju-test-user
    server_test.go:33: user "soju-test-user": upstream "testnet": sent: USER soju-test-user 0 * soju-test-user
    server_test.go:33: downstream "pipe": new connection
    server_test.go:33: downstream "pipe": received: PASS soju-test-user
    server_test.go:33: downstream "pipe": received: NICK soju-test-user
    server_test.go:33: downstream "pipe": received: USER soju-test-user/testnet 0 * soju-test-user
    server_test.go:33: user "soju-test-user": upstream "testnet": received: :soju-test-server 001 soju-test-user Welcome!
    server_test.go:29: user "soju-test-user": upstream "testnet": connection registered with nick "soju-test-user"
    server_test.go:33: user "soju-test-user": upstream "testnet": received: :soju-test-server 002 soju-test-user :Your host is soju-test-server
    server_test.go:33: user "soju-test-user": upstream "testnet": received: :soju-test-server 003 soju-test-user :Who cares when the server was created?
    server_test.go:33: user "soju-test-user": upstream "testnet": received: :soju-test-server 004 soju-test-user soju-test-server soju aiwroO OovaimnqpsrtklbeI
    server_test.go:33: user "soju-test-user": upstream "testnet": received: :soju-test-server 422 soju-test-user :No MOTD
    server_test.go:33: user "soju-test-user": upstream "testnet": sent: AWAY :Auto away
    server_test.go:29: downstream "pipe": registration complete for user "soju-test-user"
    server_test.go:33: user "soju-test-user": downstream "pipe": sent: :localhost 001 soju-test-user :Welcome to soju, soju-test-user
    server_test.go:33: user "soju-test-user": downstream "pipe": sent: :localhost 002 soju-test-user :Your host is localhost
    server_test.go:33: user "soju-test-user": downstream "pipe": sent: :localhost 004 soju-test-user localhost soju aiwroO OovaimnqpsrtklbeI
    server_test.go:33: user "soju-test-user": downstream "pipe": sent: :localhost 005 * BOUNCER_NETID=1 CLIENTTAGDENY=* :are supported
    server_test.go:33: user "soju-test-user": downstream "pipe": sent: :localhost 221 soju-test-user +
    server_test.go:33: user "soju-test-user": downstream "pipe": sent: :localhost 422 soju-test-user :Use /motd to read the message of the day
    server_test.go:33: user "soju-test-user": upstream "testnet": sent: AWAY
    server_test.go:33: user "soju-test-user": upstream "testnet": received: :soju-test-server NOTICE soju-test-user :This is a very important server notice.
    server_test.go:33: user "soju-test-user": downstream "pipe": sent: :soju-test-server NOTICE soju-test-user :This is a very important server notice.
    server_test.go:29: shutting down server
    server_test.go:29: waiting for users to finish
--- PASS: TestServer_broadcast (0.27s)
    --- PASS: TestServer_broadcast/sqlite (0.12s)
    --- PASS: TestServer_broadcast/postgres (0.15s)
=== RUN   TestServer_chatHistory
=== RUN   TestServer_chatHistory/fs
    server_test.go:29: generating Web push VAPID key pair
    server_test.go:29: starting bouncer for user "soju-test-user"
    server_test.go:29: user "soju-test-user": upstream "testnet": connecting to plain-text server at address "127.0.0.1:44399"
    server_test.go:33: user "soju-test-user": upstream "testnet": new connection
    server_test.go:33: user "soju-test-user": upstream "testnet": sent: CAP LS 302
    server_test.go:33: user "soju-test-user": upstream "testnet": sent: NICK soju-test-user
    server_test.go:33: user "soju-test-user": upstream "testnet": sent: USER soju-test-user 0 * soju-test-user
    server_test.go:33: user "soju-test-user": upstream "testnet": received: :soju-test-server 001 soju-test-user Welcome!
    server_test.go:29: user "soju-test-user": upstream "testnet": connection registered with nick "soju-test-user"
    server_test.go:33: user "soju-test-user": upstream "testnet": received: :soju-test-server 002 soju-test-user :Your host is soju-test-server
    server_test.go:33: user "soju-test-user": upstream "testnet": received: :soju-test-server 003 soju-test-user :Who cares when the server was created?
    server_test.go:33: user "soju-test-user": upstream "testnet": received: :soju-test-server 004 soju-test-user soju-test-server soju aiwroO OovaimnqpsrtklbeI
    server_test.go:33: user "soju-test-user": upstream "testnet": received: :soju-test-server 422 soju-test-user :No MOTD
    server_test.go:33: user "soju-test-user": upstream "testnet": received: @time=2023-05-23T06:00:00.000Z :foo PRIVMSG soju-test-user Hiya!
    server_test.go:33: user "soju-test-user": upstream "testnet": received: @time=2023-05-23T06:00:01.000Z :foo PRIVMSG soju-test-user :How are you doing?
    server_test.go:33: user "soju-test-user": upstream "testnet": received: @time=2023-05-23T06:00:02.000Z :foo PRIVMSG soju-test-user :Can I take a sip from your glass of soju?
    server_test.go:33: user "soju-test-user": upstream "testnet": received: PING roundtrip
    server_test.go:33: user "soju-test-user": upstream "testnet": sent: AWAY :Auto away
    server_test.go:33: user "soju-test-user": upstream "testnet": sent: PONG roundtrip
    server_test.go:33: downstream "pipe": new connection
    server_test.go:33: downstream "pipe": received: PASS soju-test-user
    server_test.go:33: downstream "pipe": received: NICK soju-test-user
    server_test.go:33: downstream "pipe": received: USER soju-test-user/testnet 0 * soju-test-user
    server_test.go:29: downstream "pipe": registration complete for user "soju-test-user"
    server_test.go:33: user "soju-test-user": downstream "pipe": sent: :localhost 001 soju-test-user :Welcome to soju, soju-test-user
    server_test.go:33: user "soju-test-user": downstream "pipe": received: PING roundtrip
    server_test.go:33: user "soju-test-user": upstream "testnet": sent: AWAY
    server_test.go:33: user "soju-test-user": downstream "pipe": sent: :localhost 002 soju-test-user :Your host is localhost
    server_test.go:33: user "soju-test-user": downstream "pipe": sent: :localhost 004 soju-test-user localhost soju aiwroO OovaimnqpsrtklbeI
    server_test.go:33: user "soju-test-user": downstream "pipe": sent: :localhost 005 * BOUNCER_NETID=1 CHATHISTORY=1000 MSGREFTYPES=timestamp CLIENTTAGDENY=* :are supported
    server_test.go:33: user "soju-test-user": downstream "pipe": sent: :localhost 221 soju-test-user +
    server_test.go:33: user "soju-test-user": downstream "pipe": sent: :localhost 422 soju-test-user :Use /motd to read the message of the day
    server_test.go:33: user "soju-test-user": downstream "pipe": sent: :localhost PONG localhost roundtrip
=== RUN   TestServer_chatHistory/fs/all
=== NAME  TestServer_chatHistory/fs
    server_test.go:33: user "soju-test-user": downstream "pipe": received: CHATHISTORY AFTER foo timestamp=2023-05-23T05:59:59.000Z 100
    server_test.go:33: user "soju-test-user": downstream "pipe": sent: :foo PRIVMSG soju-test-user Hiya!
    server_test.go:33: user "soju-test-user": downstream "pipe": received: PING roundtrip
    server_test.go:33: user "soju-test-user": downstream "pipe": sent: :foo PRIVMSG soju-test-user :How are you doing?
    server_test.go:33: user "soju-test-user": downstream "pipe": sent: :foo PRIVMSG soju-test-user :Can I take a sip from your glass of soju?
    server_test.go:33: user "soju-test-user": downstream "pipe": sent: :localhost PONG localhost roundtrip
=== RUN   TestServer_chatHistory/fs/none
=== NAME  TestServer_chatHistory/fs
    server_test.go:33: user "soju-test-user": downstream "pipe": received: CHATHISTORY AFTER foo timestamp=2023-05-23T06:00:02.000Z 100
    server_test.go:33: user "soju-test-user": downstream "pipe": received: PING roundtrip
    server_test.go:33: user "soju-test-user": downstream "pipe": sent: :localhost PONG localhost roundtrip
=== RUN   TestServer_chatHistory/fs/all_but_first
=== NAME  TestServer_chatHistory/fs
    server_test.go:33: user "soju-test-user": downstream "pipe": received: CHATHISTORY AFTER foo timestamp=2023-05-23T06:00:00.000Z 100
    server_test.go:33: user "soju-test-user": downstream "pipe": sent: :foo PRIVMSG soju-test-user :How are you doing?
    server_test.go:33: user "soju-test-user": downstream "pipe": received: PING roundtrip
    server_test.go:33: user "soju-test-user": downstream "pipe": sent: :foo PRIVMSG soju-test-user :Can I take a sip from your glass of soju?
    server_test.go:33: user "soju-test-user": downstream "pipe": sent: :localhost PONG localhost roundtrip
    server_test.go:29: shutting down server
    server_test.go:29: waiting for users to finish
=== RUN   TestServer_chatHistory/db
    server_test.go:29: generating Web push VAPID key pair
    server_test.go:29: starting bouncer for user "soju-test-user"
    server_test.go:29: user "soju-test-user": upstream "testnet": connecting to plain-text server at address "127.0.0.1:40381"
    server_test.go:33: user "soju-test-user": upstream "testnet": new connection
    server_test.go:33: user "soju-test-user": upstream "testnet": sent: CAP LS 302
    server_test.go:33: user "soju-test-user": upstream "testnet": sent: NICK soju-test-user
    server_test.go:33: user "soju-test-user": upstream "testnet": sent: USER soju-test-user 0 * soju-test-user
    server_test.go:33: user "soju-test-user": upstream "testnet": received: :soju-test-server 001 soju-test-user Welcome!
    server_test.go:29: user "soju-test-user": upstream "testnet": connection registered with nick "soju-test-user"
    server_test.go:33: user "soju-test-user": upstream "testnet": received: :soju-test-server 002 soju-test-user :Your host is soju-test-server
    server_test.go:33: user "soju-test-user": upstream "testnet": received: :soju-test-server 003 soju-test-user :Who cares when the server was created?
    server_test.go:33: user "soju-test-user": upstream "testnet": received: :soju-test-server 004 soju-test-user soju-test-server soju aiwroO OovaimnqpsrtklbeI
    server_test.go:33: user "soju-test-user": upstream "testnet": received: :soju-test-server 422 soju-test-user :No MOTD
    server_test.go:33: user "soju-test-user": upstream "testnet": received: @time=2023-05-23T06:00:00.000Z :foo PRIVMSG soju-test-user Hiya!
    server_test.go:33: user "soju-test-user": upstream "testnet": received: @time=2023-05-23T06:00:01.000Z :foo PRIVMSG soju-test-user :How are you doing?
    server_test.go:33: user "soju-test-user": upstream "testnet": received: @time=2023-05-23T06:00:02.000Z :foo PRIVMSG soju-test-user :Can I take a sip from your glass of soju?
    server_test.go:33: user "soju-test-user": upstream "testnet": received: PING roundtrip
    server_test.go:33: user "soju-test-user": upstream "testnet": sent: AWAY :Auto away
    server_test.go:33: user "soju-test-user": upstream "testnet": sent: PONG roundtrip
    server_test.go:33: downstream "pipe": new connection
    server_test.go:33: downstream "pipe": received: PASS soju-test-user
    server_test.go:33: downstream "pipe": received: NICK soju-test-user
    server_test.go:33: downstream "pipe": received: USER soju-test-user/testnet 0 * soju-test-user
    server_test.go:29: downstream "pipe": registration complete for user "soju-test-user"
    server_test.go:33: user "soju-test-user": downstream "pipe": sent: :localhost 001 soju-test-user :Welcome to soju, soju-test-user
    server_test.go:33: user "soju-test-user": downstream "pipe": received: PING roundtrip
    server_test.go:33: user "soju-test-user": downstream "pipe": sent: :localhost 002 soju-test-user :Your host is localhost
    server_test.go:33: user "soju-test-user": downstream "pipe": sent: :localhost 004 soju-test-user localhost soju aiwroO OovaimnqpsrtklbeI
    server_test.go:33: user "soju-test-user": downstream "pipe": sent: :localhost 005 * BOUNCER_NETID=1 CHATHISTORY=1000 MSGREFTYPES=timestamp CLIENTTAGDENY=* :are supported
    server_test.go:33: user "soju-test-user": downstream "pipe": sent: :localhost 221 soju-test-user +
    server_test.go:33: user "soju-test-user": downstream "pipe": sent: :localhost 422 soju-test-user :Use /motd to read the message of the day
    server_test.go:33: user "soju-test-user": upstream "testnet": sent: AWAY
    server_test.go:33: user "soju-test-user": downstream "pipe": sent: :localhost PONG localhost roundtrip
=== RUN   TestServer_chatHistory/db/all
=== NAME  TestServer_chatHistory/db
    server_test.go:33: user "soju-test-user": downstream "pipe": received: CHATHISTORY AFTER foo timestamp=2023-05-23T05:59:59.000Z 100
    server_test.go:33: user "soju-test-user": downstream "pipe": received: PING roundtrip
    server_test.go:33: user "soju-test-user": downstream "pipe": sent: :foo PRIVMSG soju-test-user Hiya!
    server_test.go:33: user "soju-test-user": downstream "pipe": sent: :foo PRIVMSG soju-test-user :How are you doing?
    server_test.go:33: user "soju-test-user": downstream "pipe": sent: :foo PRIVMSG soju-test-user :Can I take a sip from your glass of soju?
    server_test.go:33: user "soju-test-user": downstream "pipe": sent: :localhost PONG localhost roundtrip
=== RUN   TestServer_chatHistory/db/none
=== NAME  TestServer_chatHistory/db
    server_test.go:33: user "soju-test-user": downstream "pipe": received: CHATHISTORY AFTER foo timestamp=2023-05-23T06:00:02.000Z 100
    server_test.go:33: user "soju-test-user": downstream "pipe": received: PING roundtrip
    server_test.go:33: user "soju-test-user": downstream "pipe": sent: :localhost PONG localhost roundtrip
=== RUN   TestServer_chatHistory/db/all_but_first
=== NAME  TestServer_chatHistory/db
    server_test.go:33: user "soju-test-user": downstream "pipe": received: CHATHISTORY AFTER foo timestamp=2023-05-23T06:00:00.000Z 100
    server_test.go:33: user "soju-test-user": downstream "pipe": received: PING roundtrip
    server_test.go:33: user "soju-test-user": downstream "pipe": sent: :foo PRIVMSG soju-test-user :How are you doing?
    server_test.go:33: user "soju-test-user": downstream "pipe": sent: :foo PRIVMSG soju-test-user :Can I take a sip from your glass of soju?
    server_test.go:33: user "soju-test-user": downstream "pipe": sent: :localhost PONG localhost roundtrip
    server_test.go:29: shutting down server
    server_test.go:29: waiting for users to finish
    server_test.go:29: user "soju-test-user": network "testnet": connection error to "irc+insecure://127.0.0.1:40381": failed to handle messages: failed to read IRC command: read tcp 127.0.0.1:41898->127.0.0.1:40381: read: connection reset by peer
    server_test.go:33: user "soju-test-user": downstream "pipe": sent: :BouncerServ!BouncerServ@BouncerServ NOTICE soju-test-user :disconnected from testnet
    server_test.go:29: user "soju-test-user": downstream "pipe": failed to write message: io: read/write on closed pipe
    server_test.go:33: user "soju-test-user": downstream "pipe": connection closed
    server_test.go:33: user "soju-test-user": upstream "testnet": connection closed
--- PASS: TestServer_chatHistory (0.24s)
    --- PASS: TestServer_chatHistory/fs (0.12s)
        --- PASS: TestServer_chatHistory/fs/all (0.00s)
        --- PASS: TestServer_chatHistory/fs/none (0.00s)
        --- PASS: TestServer_chatHistory/fs/all_but_first (0.00s)
    server_test.go:33: user "soju-test-user": upstream "testnet": connection closed
    server_test.go:33: user "soju-test-user": downstream "pipe": connection closed
    --- PASS: TestServer_chatHistory/db (0.11s)
        --- PASS: TestServer_chatHistory/db/all (0.00s)
        --- PASS: TestServer_chatHistory/db/none (0.00s)
        --- PASS: TestServer_chatHistory/db/all_but_first (0.00s)
=== RUN   TestSplit
--- PASS: TestSplit (0.00s)
PASS
ok  	codeberg.org/emersion/soju	0.513s
?   	codeberg.org/emersion/soju/contrib/migrate-db	[no test files]
?   	codeberg.org/emersion/soju/contrib/migrate-logs	[no test files]
?   	codeberg.org/emersion/soju/contrib/znc-import	[no test files]
?   	codeberg.org/emersion/soju/fileupload	[no test files]
?   	codeberg.org/emersion/soju/identd	[no test files]
?   	codeberg.org/emersion/soju/msgstore	[no test files]
?   	codeberg.org/emersion/soju/msgstore/znclog	[no test files]
?   	codeberg.org/emersion/soju/xirc	[no test files]
=== RUN   TestPostgresMigrations
--- PASS: TestPostgresMigrations (0.04s)
=== RUN   TestSqliteMigrations
--- PASS: TestSqliteMigrations (0.01s)
PASS
ok  	codeberg.org/emersion/soju/database	0.050s
gofmt
1
2
3
+ cd soju
++ gofmt -l .
+ test -z
Build complete: success 7 months ago (took a minute)