annotate resfinder/tests/functional_tests.py @ 0:55051a9bc58d draft default tip

Uploaded
author dcouvin
date Mon, 10 Jan 2022 20:06:07 +0000
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
1 #!/usr/bin/env python3
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
2 import unittest
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
3 from subprocess import PIPE, run
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
4 import os
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
5 import shutil
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
6 import sys
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
7 import argparse
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
8
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
9
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
10 # This is not best practice but for testing, this is the best I could
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
11 # come up with
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
12 sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
13
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
14 # TODO: Species specific aqquired genes only pheno results, not spec specific?
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
15
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
16 test_names = ["test1", "test2", "test3", "test4"]
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
17 test_data = {
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
18 # Test published acquired resistance
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
19 test_names[0]: "data/test_isolate_01.fa",
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
20 test_names[1]: "data/test_isolate_01_1.fq data/test_isolate_01_2.fq",
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
21 # Test published point mut resistance
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
22 test_names[2]: "data/test_isolate_05.fa",
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
23 test_names[3]: "data/test_isolate_05_1.fq data/test_isolate_05_2.fq",
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
24 }
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
25 run_test_dir = "running_test"
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
26 working_dir = os.path.dirname(os.path.realpath(__file__))
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
27
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
28
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
29 class ResFinderRunTest(unittest.TestCase):
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
30
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
31 @classmethod
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
32 def setUpClass(cls):
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
33 # Delete "running_test" folder from previous tests if still exists
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
34 if os.path.isdir(run_test_dir):
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
35 try:
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
36 shutil.rmtree(run_test_dir)
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
37 # The following error has occured using VirtualBox under Windows 10
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
38 # with ResFinder installed in a shared folder:
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
39 # OSError [Errno: 26] Text file busy: 'tmp'
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
40 except OSError:
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
41 procs = run(["rm", "-r", run_test_dir])
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
42
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
43 # Set absolute path for database folders and external programs
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
44 cls.db_path_res = os.path.abspath(args.db_path_res)
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
45 cls.blastPath = os.path.abspath(args.blast_path)
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
46 cls.kmaPath = os.path.abspath(args.kma_path)
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
47 cls.db_path_point = os.path.abspath(args.db_path_point)
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
48 cls.dir_res = os.path.join(os.path.dirname(__file__), '../', )
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
49 cls.dir_res = os.path.abspath(cls.dir_res)
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
50 # Change working dir to test dir
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
51 os.chdir(working_dir)
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
52 # Does not allow running two tests in parallel
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
53 os.makedirs(run_test_dir, exist_ok=False)
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
54
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
55 @classmethod
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
56 def tearDownClass(cls):
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
57 try:
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
58 shutil.rmtree(run_test_dir)
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
59 # The following error has occured using VirtualBox under Windows 10
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
60 # with ResFinder installed in a shared folder:
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
61 # OSError [Errno: 26] Text file busy: 'tmp'
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
62 except OSError:
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
63 procs = run(["rm", "-r", run_test_dir])
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
64
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
65 def test_on_data_with_just_acquired_resgene_using_blast(self):
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
66 # Maria has an E. coli isolate, with unknown resistance.
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
67 # At first, she just wants to know which acquired resistance genes are
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
68 # found in the genome.
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
69 # She therefore runs resfinder cmd line.
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
70
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
71 # First Maria checks out the documentation.
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
72 procs = run("python3 ../run_resfinder.py -h", shell=True, stdout=PIPE,
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
73 check=True)
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
74 output = procs.stdout.decode()
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
75 self.assertIn("--help", output)
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
76
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
77 # Maria goes on to run ResFinder for acquired genes with her E. coli
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
78 # isolate.
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
79 # First she creates a few directories to store her output.
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
80 test1_dir = run_test_dir + "/" + test_names[0]
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
81 os.makedirs(test1_dir)
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
82 # Then she runs run_resfinder with her first isolate.
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
83 cmd_acquired = ("python3 " + self.dir_res + "/run_resfinder.py"
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
84 + " -ifa " + test_data[test_names[0]]
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
85 + " -o " + test1_dir
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
86 + " -s 'Escherichia coli'"
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
87 + " --min_cov 0.6"
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
88 + " -t 0.8"
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
89 + " --acquired"
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
90 + " --db_path_res " + self.db_path_res
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
91 + " --blastPath " + self.blastPath)
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
92
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
93 procs = run(cmd_acquired, shell=True, stdout=PIPE, stderr=PIPE,
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
94 check=True)
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
95
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
96 fsa_hit = test1_dir + "/ResFinder_Hit_in_genome_seq.fsa"
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
97 fsa_res = test1_dir + "/ResFinder_Resistance_gene_seq.fsa"
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
98 res_table = test1_dir + "/ResFinder_results_table.txt"
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
99 res_tab = test1_dir + "/ResFinder_results_tab.txt"
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
100 results = test1_dir + "/ResFinder_results.txt"
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
101
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
102 with open(fsa_hit, "r") as fh:
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
103 check_result = fh.readline()
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
104 self.assertIn("blaB-2_1_AF189300", check_result)
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
105
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
106 with open(fsa_res, "r") as fh:
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
107 check_result = fh.readline()
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
108 self.assertIn("blaB-2_AF189300", check_result)
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
109
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
110 with open(res_table, "r") as fh:
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
111 for line in fh:
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
112 if(line.startswith("blaB-2")):
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
113 check_result = line
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
114 break
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
115 self.assertIn("blaB-2_1_AF189300", check_result)
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
116
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
117 with open(res_tab, "r") as fh:
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
118 fh.readline()
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
119 check_result = fh.readline()
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
120 self.assertIn("blaB-2_1_AF189300", check_result)
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
121
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
122 with open(results, "r") as fh:
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
123 fh.readline()
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
124 fh.readline()
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
125 fh.readline()
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
126 fh.readline()
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
127 fh.readline()
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
128 check_result = fh.readline()
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
129 self.assertIn("blaB-2_1_AF189300", check_result)
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
130
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
131 def test_on_data_with_just_acquired_resgene_using_kma(self):
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
132 # Maria has another E. coli isolate, with unknown resistance.
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
133 # This time she does not have an assembly, but only raw data.
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
134 # She therefore runs resfinder cmd line using KMA.
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
135
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
136 # First she creates a few directories to store her output.
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
137 test2_dir = run_test_dir + "/" + test_names[1]
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
138 os.makedirs(test2_dir, exist_ok=False)
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
139
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
140 # Then she runs run_resfinder with her first isolate.
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
141 cmd_acquired = ("python3 " + self.dir_res + "/run_resfinder.py"
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
142 + " -ifq " + test_data[test_names[1]]
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
143 + " -o " + test2_dir
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
144 + " -s 'Escherichia coli'"
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
145 + " --min_cov 0.6"
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
146 + " -t 0.8"
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
147 + " --acquired"
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
148 + " --db_path_res " + self.db_path_res
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
149 + " --kmaPath " + self.kmaPath)
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
150
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
151 procs = run(cmd_acquired, shell=True, stdout=PIPE, stderr=PIPE,
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
152 check=True)
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
153
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
154 fsa_hit = test2_dir + "/ResFinder_Hit_in_genome_seq.fsa"
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
155 fsa_res = test2_dir + "/ResFinder_Resistance_gene_seq.fsa"
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
156 res_table = test2_dir + "/ResFinder_results_table.txt"
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
157 res_tab = test2_dir + "/ResFinder_results_tab.txt"
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
158 results = test2_dir + "/ResFinder_results.txt"
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
159
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
160 with open(fsa_hit, "r") as fh:
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
161 check_result = fh.readline()
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
162 self.assertIn("blaB-2", check_result)
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
163
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
164 with open(fsa_res, "r") as fh:
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
165 check_result = fh.readline()
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
166 self.assertIn("blaB-2_AF189300", check_result)
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
167
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
168 with open(res_table, "r") as fh:
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
169 for line in fh:
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
170 if(line.startswith("blaB-2")):
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
171 check_result = line
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
172 break
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
173 self.assertIn("blaB-2", check_result)
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
174
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
175 with open(res_tab, "r") as fh:
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
176 fh.readline()
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
177 check_result = fh.readline()
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
178 self.assertIn("blaB-2", check_result)
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
179
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
180 with open(results, "r") as fh:
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
181 fh.readline()
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
182 fh.readline()
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
183 fh.readline()
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
184 fh.readline()
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
185 fh.readline()
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
186 check_result = fh.readline()
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
187 self.assertIn("blaB-2", check_result)
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
188
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
189 def test_on_data_with_just_point_mut_using_blast(self):
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
190 # Maria also wants to check her assembled E. coli isolate for
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
191 # resistance caused by point mutations.
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
192
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
193 # First she creates a few directories to store her output.
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
194 test3_dir = run_test_dir + "/" + test_names[2]
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
195 os.makedirs(test3_dir)
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
196
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
197 # Then she runs run_resfinder with her first isolate.
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
198 cmd_point = ("python3 " + self.dir_res + "/run_resfinder.py"
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
199 + " -ifa " + test_data[test_names[2]]
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
200 + " -o " + test3_dir
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
201 + " -s 'Escherichia coli'"
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
202 + " --min_cov 0.6"
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
203 + " --threshold 0.8"
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
204 + " --point"
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
205 + " --db_path_point " + self.db_path_point
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
206 + " --db_path_res " + self.db_path_res
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
207 + " --blastPath " + self.blastPath)
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
208
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
209 procs = run(cmd_point, shell=True, stdout=PIPE, stderr=PIPE,
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
210 check=True)
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
211
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
212 # Expected output files
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
213 pf_pred = test3_dir + "/PointFinder_prediction.txt"
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
214 pf_res = test3_dir + "/PointFinder_results.txt"
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
215 pf_table = test3_dir + "/PointFinder_table.txt"
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
216
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
217 with open(pf_res, "r") as fh:
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
218 fh.readline()
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
219 check_result = fh.readline()
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
220 self.assertIn("gyrA", check_result)
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
221 self.assertIn("p.S83A", check_result)
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
222
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
223 point_mut_found = False
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
224 with open(pf_table, "r") as fh:
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
225 for line in fh:
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
226 if(line.startswith("gyrA p.S83A")):
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
227 check_result = line
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
228 point_mut_found = True
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
229 break
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
230 self.assertEqual(point_mut_found, True)
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
231
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
232 def test_on_data_with_just_point_mut_using_kma(self):
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
233 # Maria has another E. coli isolate, with unknown resistance.
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
234 # This time she does not have an assembly, but only raw data.
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
235 # She therefore runs resfinder cmd line using KMA.
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
236
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
237 # First she creates a few directories to store her output.
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
238 test4_dir = run_test_dir + "/" + test_names[3]
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
239 os.makedirs(test4_dir, exist_ok=False)
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
240
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
241 # Then she runs run_resfinder with her first isolate.
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
242 cmd_acquired = ("python3 " + self.dir_res + "/run_resfinder.py"
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
243 + " -ifq " + test_data[test_names[3]]
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
244 + " -o " + test4_dir
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
245 + " -s 'Escherichia coli'"
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
246 + " --min_cov 0.6"
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
247 + " --threshold 0.8"
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
248 + " --point"
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
249 + " --db_path_point " + self.db_path_point
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
250 + " --db_path_res " + self.db_path_res
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
251 + " --kmaPath " + self.kmaPath)
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
252
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
253 procs = run(cmd_acquired, shell=True, stdout=PIPE, stderr=PIPE,
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
254 check=True)
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
255
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
256 # Expected output files
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
257 pf_pred = test4_dir + "/PointFinder_prediction.txt"
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
258 pf_res = test4_dir + "/PointFinder_results.txt"
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
259 pf_table = test4_dir + "/PointFinder_table.txt"
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
260
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
261 with open(pf_res, "r") as fh:
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
262 fh.readline()
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
263 check_result = fh.readline()
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
264 self.assertIn("gyrA", check_result)
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
265 self.assertIn("p.S83A", check_result)
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
266
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
267 point_mut_found = False
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
268 with open(pf_table, "r") as fh:
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
269 for line in fh:
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
270 if(line.startswith("gyrA p.S83A")):
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
271 check_result = line
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
272 point_mut_found = True
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
273 break
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
274 self.assertEqual(point_mut_found, True)
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
275
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
276
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
277 def parse_args():
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
278 parser = argparse.ArgumentParser(add_help=False, allow_abbrev=False)
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
279 group = parser.add_argument_group("Options")
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
280 group.add_argument('-res_help', "--resfinder_help",
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
281 action="help")
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
282 group.add_argument("-db_res", "--db_path_res",
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
283 help="Path to the databases for ResFinder",
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
284 default="./db_resfinder")
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
285 group.add_argument("-b", "--blastPath",
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
286 dest="blast_path",
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
287 help="Path to blastn",
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
288 default="./cge/blastn")
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
289 group.add_argument("-k", "--kmaPath",
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
290 dest="kma_path",
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
291 help="Path to KMA",
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
292 default="./cge/kma/kma")
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
293 group.add_argument("-db_point", "--db_path_point",
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
294 help="Path to the databases for PointFinder",
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
295 default="./db_pointfinder")
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
296 ns, args = parser.parse_known_args(namespace=unittest)
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
297 return ns, sys.argv[:1] + args
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
298
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
299 if __name__ == "__main__":
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
300 args, argv = parse_args() # run this first
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
301 sys.argv[:] = argv # create cleans argv for main()
55051a9bc58d Uploaded
dcouvin
parents:
diff changeset
302 unittest.main()