Write import stats to stats.json.
[lightning.git] / pipeline_test.go
1 package main
2
3 import (
4         "bytes"
5         "fmt"
6         "io"
7         "io/ioutil"
8         "os"
9         "sync"
10
11         "gopkg.in/check.v1"
12 )
13
14 type pipelineSuite struct{}
15
16 var _ = check.Suite(&pipelineSuite{})
17
18 func (s *pipelineSuite) TestImport(c *check.C) {
19         for _, infile := range []string{
20                 "testdata/pipeline1/",
21                 "testdata/ref.fasta",
22         } {
23                 c.Logf("TestImport: %s", infile)
24                 var wg sync.WaitGroup
25
26                 statsin, importout := io.Pipe()
27                 wg.Add(1)
28                 go func() {
29                         defer wg.Done()
30                         code := (&importer{}).RunCommand("lightning import", []string{"-local=true", "-skip-ooo=true", "-output-tiles", "-tag-library", "testdata/tags", infile}, bytes.NewReader(nil), importout, os.Stderr)
31                         c.Check(code, check.Equals, 0)
32                         importout.Close()
33                 }()
34                 statsout := &bytes.Buffer{}
35                 wg.Add(1)
36                 go func() {
37                         defer wg.Done()
38                         code := (&statscmd{}).RunCommand("lightning stats", []string{"-local"}, statsin, statsout, os.Stderr)
39                         c.Check(code, check.Equals, 0)
40                 }()
41                 wg.Wait()
42                 c.Logf("%s", statsout.String())
43         }
44 }
45
46 func (s *pipelineSuite) TestImportMerge(c *check.C) {
47         libfile := make([]string, 2)
48         tmpdir := c.MkDir()
49
50         var wg sync.WaitGroup
51         for i, infile := range []string{
52                 "testdata/ref.fasta",
53                 "testdata/pipeline1/",
54         } {
55                 i, infile := i, infile
56                 c.Logf("TestImportMerge: %s", infile)
57                 libfile[i] = fmt.Sprintf("%s/%d.gob", tmpdir, i)
58                 wg.Add(1)
59                 go func() {
60                         defer wg.Done()
61                         args := []string{"-local=true", "-o=" + libfile[i], "-skip-ooo=true", "-output-tiles", "-tag-library", "testdata/tags"}
62                         if i == 0 {
63                                 // ref only
64                                 args = append(args, "-include-no-calls")
65                         }
66                         args = append(args, infile)
67                         code := (&importer{}).RunCommand("lightning import", args, bytes.NewReader(nil), &bytes.Buffer{}, os.Stderr)
68                         c.Check(code, check.Equals, 0)
69                 }()
70         }
71         wg.Wait()
72
73         merged := &bytes.Buffer{}
74         code := (&merger{}).RunCommand("lightning merge", []string{"-local", libfile[0], libfile[1]}, bytes.NewReader(nil), merged, os.Stderr)
75         c.Check(code, check.Equals, 0)
76         c.Logf("len(merged) %d", merged.Len())
77
78         statsout := &bytes.Buffer{}
79         code = (&statscmd{}).RunCommand("lightning stats", []string{"-local"}, bytes.NewReader(merged.Bytes()), statsout, os.Stderr)
80         c.Check(code, check.Equals, 0)
81         c.Check(statsout.Len() > 0, check.Equals, true)
82         c.Logf("%s", statsout.String())
83
84         c.Check(ioutil.WriteFile(tmpdir+"/merged.gob", merged.Bytes(), 0666), check.IsNil)
85
86         hgvsout := &bytes.Buffer{}
87         code = (&exporter{}).RunCommand("lightning export", []string{"-local", "-ref", "testdata/ref.fasta", "-output-format", "hgvs", "-i", tmpdir + "/merged.gob"}, bytes.NewReader(nil), hgvsout, os.Stderr)
88         c.Check(code, check.Equals, 0)
89         c.Check(hgvsout.Len() > 0, check.Equals, true)
90         c.Logf("%s", hgvsout.String())
91         c.Check(hgvsout.String(), check.Equals, `chr1:g.1_3delinsGGC    .
92 chr1:g.[41_42delinsAA];[41=]    .
93 chr1:g.[161=];[161A>T]  .
94 chr1:g.[178=];[178A>T]  .
95 chr1:g.222_224del       .
96 chr1:g.[302=];[302_305delinsAAAA]       .
97 .       chr2:g.[1=];[1_3delinsAAA]
98 .       chr2:g.125_127delinsAAA
99 chr2:g.[241_254del];[241=]      .
100 chr2:g.[258_269delinsAA];[258=] .
101 chr2:g.[315C>A];[315=]  .
102 chr2:g.[470_472del];[470=]      .
103 chr2:g.[471=];[471_472delinsAA] .
104 `)
105
106         vcfout := &bytes.Buffer{}
107         code = (&exporter{}).RunCommand("lightning export", []string{"-local", "-ref", "testdata/ref.fasta", "-output-format", "vcf", "-i", tmpdir + "/merged.gob", "-output-bed", tmpdir + "/export.bed"}, bytes.NewReader(nil), vcfout, os.Stderr)
108         c.Check(code, check.Equals, 0)
109         c.Check(vcfout.Len() > 0, check.Equals, true)
110         c.Logf("%s", vcfout.String())
111         c.Check(vcfout.String(), check.Equals, `chr1    1       NNN     GGC     1/1     0/0
112 chr1    41      TT      AA      1/0     0/0
113 chr1    161     A       T       0/1     0/0
114 chr1    178     A       T       0/1     0/0
115 chr1    221     TCCA    T       1/1     0/0
116 chr1    302     TTTT    AAAA    0/1     0/0
117 chr2    1       TTT     AAA     0/0     0/1
118 chr2    125     CTT     AAA     0/0     1/1
119 chr2    240     ATTTTTCTTGCTCTC A       1/0     0/0
120 chr2    258     CCTTGTATTTTT    AA      1/0     0/0
121 chr2    315     C       A       1/0     0/0
122 chr2    469     GTGG    G       1/0     0/0
123 chr2    471     GG      AA      0/1     0/0
124 `)
125         bedout, err := ioutil.ReadFile(tmpdir + "/export.bed")
126         c.Check(err, check.IsNil)
127         c.Logf("%s", string(bedout))
128         c.Check(string(bedout), check.Equals, `chr1 0 248 0 500 . 0 224
129 chr1 224 372 1 1000 . 248 348
130 chr1 348 496 2 1000 . 372 472
131 chr1 472 572 3 1000 . 496 572
132 chr2 0 248 4 1000 . 0 224
133 chr2 224 372 5 750 . 248 348
134 chr2 348 496 6 1000 . 372 472
135 chr2 472 572 7 1000 . 496 572
136 `)
137 }