@@ -12,6 +12,7 @@ import (
1212 "testing"
1313 "time"
1414
15+ "github.com/googleapis/google-cloud-go-testing/storage/stiface"
1516 v2 "github.com/m-lab/annotation-service/api/v2"
1617
1718 "cloud.google.com/go/bigquery"
@@ -94,6 +95,10 @@ func (in *inMemorySink) Commit(data []interface{}, label string) (int, error) {
9495 return len (data ), nil
9596}
9697
98+ func (in * inMemorySink ) Close () error {
99+ return nil
100+ }
101+
97102func (in * inMemorySink ) Flush () error {
98103 in .committed = len (in .data )
99104 return nil
@@ -102,6 +107,10 @@ func (in *inMemorySink) Committed() int {
102107 return in .committed
103108}
104109
110+ type nullCloser struct {}
111+
112+ func (nc nullCloser ) Close () error { return nil }
113+
105114// NOTE: This uses a fake annotator which returns no annotations.
106115// TODO: This test seems to be flakey in travis - sometimes only 357 tests instead of 362
107116func TestTCPParser (t * testing.T ) {
@@ -118,7 +127,7 @@ func TestTCPParser(t *testing.T) {
118127 // Inject fake inserter and annotator
119128 ins := newInMemorySink ()
120129 p := parser .NewTCPInfoParser (ins , "test" , "_suffix" , & fakeAnnotator {})
121- task := task .NewTask (filename , src , p )
130+ task := task .NewTask (filename , src , p , nullCloser {} )
122131
123132 startDecode := time .Now ()
124133 n , err := task .ProcessAllTests ()
@@ -228,7 +237,7 @@ func TestTCPTask(t *testing.T) {
228237 t .Fatal ("Failed reading testdata from" , filename )
229238 }
230239
231- task := task .NewTask (filename , src , p )
240+ task := task .NewTask (filename , src , p , & nullCloser {} )
232241
233242 n , err := task .ProcessAllTests ()
234243 if err != nil {
@@ -253,7 +262,7 @@ func TestBQSaver(t *testing.T) {
253262 t .Fatal ("Failed reading testdata from" , filename )
254263 }
255264
256- task := task .NewTask (filename , src , p )
265+ task := task .NewTask (filename , src , p , & nullCloser {} )
257266
258267 _ , err = task .ProcessAllTests ()
259268 if err != nil {
@@ -272,6 +281,51 @@ func TestBQSaver(t *testing.T) {
272281 }
273282}
274283
284+ // This test writes 364 rows to a json file in GCS.
285+ // The rows can then be loaded into a BQ table, using the schema in testdata, like:
286+ // bq load --source_format=NEWLINE_DELIMITED_JSON \
287+ // mlab-sandbox:gfr.small_tcpinfo gs://archive-mlab-testing/gfr/tcpinfo.json ./schema.json
288+ // Recommend commenting out snapshots in tcpinfo.go.
289+ func TestTaskToGCS (t * testing.T ) {
290+ t .Skip ("Skipping test intended for manual experimentation" )
291+
292+ os .Setenv ("RELEASE_TAG" , "foobar" )
293+ parser .InitParserVersionForTest ()
294+
295+ c , err := storage .GetStorageClient (true )
296+ if err != nil {
297+ t .Fatal (err )
298+ }
299+
300+ rw , err := storage .NewRowWriter (context .Background (), stiface .AdaptClient (c ), "archive-mlab-testing" , "gfr/tcpinfo.json" )
301+ if err != nil {
302+ t .Fatal (err )
303+ }
304+ // Inject fake inserter and annotator
305+ p := parser .NewTCPInfoParser (rw , "test" , "suffix" , & fakeAnnotator {})
306+
307+ filename := "testdata/20190516T013026.744845Z-tcpinfo-mlab4-arn02-ndt.tgz"
308+ src , err := fileSource (filename )
309+ if err != nil {
310+ t .Fatal ("Failed reading testdata from" , filename )
311+ }
312+
313+ task := task .NewTask (filename , src , p , & nullCloser {})
314+
315+ n , err := task .ProcessAllTests ()
316+ if err != nil {
317+ t .Fatal (err )
318+ }
319+ err = rw .Close ()
320+ if err != nil {
321+ t .Fatal (err )
322+ }
323+
324+ if n != 364 {
325+ t .Errorf ("Expected ProcessAllTests to handle %d files, but it handled %d.\n " , 364 , n )
326+ }
327+ }
328+
275329func BenchmarkTCPParser (b * testing.B ) {
276330 os .Setenv ("RELEASE_TAG" , "foobar" )
277331 parser .InitParserVersionForTest ()
@@ -288,7 +342,7 @@ func BenchmarkTCPParser(b *testing.B) {
288342 b .Fatalf ("cannot read testdata." )
289343 }
290344
291- task := task .NewTask (filename , src , p )
345+ task := task .NewTask (filename , src , p , & nullCloser {} )
292346
293347 n , err = task .ProcessAllTests ()
294348 if err != nil {
0 commit comments