Beispiel #1
0
 def test_previous_run(self):
     kwargs = {'cfg_file' : "nimportnaoik",
               'sequence_db' : os.path.join(self._data_dir, "base", "test_base.fa"),
               'db_type' : 'gembase',
               'def_dir' : os.path.join(self._data_dir, 'DEF'),
               'profile_dir' : os.path.join(self._data_dir, 'profiles'),
               'previous_run' : 'foo',
               'res_search_dir' : self.tmp_dir
     }
     self.assertRaises(ValueError, Config, **kwargs)
     try:
         cfg_base = Config(cfg_file = "nimportnaoik",
                           sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                           db_type = 'gembase',
                           def_dir = os.path.join(self._data_dir, 'DEF'),
                           profile_dir = os.path.join(self._data_dir, 'profiles'),
                           res_search_dir = self.tmp_dir
                           )
         self.assertIsNone(cfg_base.previous_run)
         cfg_base.save( cfg_base.working_dir )
         #wait
         time.sleep(1)
         new_cfg = Config(previous_run = cfg_base.working_dir)
         self.assertEqual(new_cfg.previous_run, cfg_base.working_dir)
          
     finally:
          
         # close loggers filehandles, so they don't block file deletion
         # in shutil.rmtree calls in Windows
         logging.shutdown()
         try:
             shutil.rmtree(new_cfg.working_dir)
         except:
             pass
Beispiel #2
0
 def test_worker_nb(self):
     self.cfg = Config(cfg_file = "nimportnaoik",
                       sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                       db_type = 'gembase',
                       def_dir = os.path.join(self._data_dir, 'DEF'),
                       profile_dir = os.path.join(self._data_dir, 'profiles'),
                       res_search_dir = self.tmp_dir
                       )
     self.assertEqual(self.cfg.worker_nb, 1)
     self.tearDown()
     self.cfg = Config(cfg_file = "nimportnaoik",
                       sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                       db_type = 'gembase',
                       def_dir = os.path.join(self._data_dir, 'DEF'),
                       profile_dir = os.path.join(self._data_dir, 'profiles'),
                       res_search_dir = self.tmp_dir,
                       worker_nb = 2
                       )
     self.assertEqual(self.cfg.worker_nb, 2)
     self.tearDown()
     kwargs = {'cfg_file' : "nimportnaoik",
               'sequence_db' : os.path.join(self._data_dir, "base", "test_base.fa"),
               'db_type' : 'gembase',
               'def_dir' : os.path.join(self._data_dir, 'DEF'),
               'profile_dir' : os.path.join(self._data_dir, 'profiles'),
               'res_search_dir' : self.tmp_dir,
               'worker_nb' : '2.3'
     }
     self.assertRaises(ValueError, Config, **kwargs)   
Beispiel #3
0
    def test_def_dir(self):
        kwargs = {'cfg_file' : "nimportnaoik",
                  'sequence_db' : os.path.join(self._data_dir, "base", "test_base.fa"),
                  'db_type' : 'gembase',
                  'profile_dir' : os.path.join(self._data_dir, 'profiles'),
                  'def_dir': '/kjhdsjkg938268235764kjdsg',
                  'res_search_dir' : self.tmp_dir
                  }
        real_def_dir = os.path.join(os.path.dirname(__file__), '..', 'data', 'DEF'),
        self.assertRaises(ValueError, Config, **kwargs)
 
        def_dir = os.path.join(tempfile.gettempdir(), 'macsyfinder_DEF')
        if not os.path.exists(def_dir):
            os.mkdir(def_dir)
        self.cfg = Config(cfg_file = "nimportnaoik",
                          sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                          db_type = 'gembase',
                          def_dir = def_dir,
                          profile_dir = os.path.join(self._data_dir, 'profiles'),
                          res_search_dir = self.tmp_dir
                          ) 
        self.assertEqual(def_dir, self.cfg.def_dir)
        shutil.rmtree(def_dir)
        self.tearDown()
        def_dir = os.path.join(os.path.dirname(__file__),'..', 'data',  'DEF')
        self.cfg = Config(cfg_file = "nimportnaoik",
                          sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                          db_type = 'gembase',
                          def_dir = def_dir,
                          profile_dir = os.path.join(self._data_dir, 'profiles'),
                          res_search_dir = self.tmp_dir
                          )  
        self.assertEqual(def_dir, self.cfg.def_dir)
 def test_previous_run(self):
     kwargs = {'cfg_file' : "nimportnaoik",
               'sequence_db' : os.path.join(self._data_dir, "base", "test_base.fa"),
               'db_type' : 'gembase',
               'def_dir' : os.path.join(self._data_dir, 'DEF'),
               'profile_dir' : os.path.join(self._data_dir, 'profiles'),
               'previous_run' : 'foo',
               'res_search_dir' : '/tmp',
     }
     self.assertRaises(ValueError, Config, **kwargs)
     try:
         cfg_base = Config(cfg_file = "nimportnaoik",
                           sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                           db_type = 'gembase',
                           def_dir = os.path.join(self._data_dir, 'DEF'),
                           profile_dir = os.path.join(self._data_dir, 'profiles'),
                           res_search_dir = '/tmp',
                           )
         self.assertIsNone(cfg_base.previous_run)
         cfg_base.save( cfg_base.working_dir )
         #wait
         time.sleep(1)
         new_cfg = Config(previous_run = cfg_base.working_dir)
         self.assertEqual(new_cfg.previous_run, cfg_base.working_dir)
     finally:
         try:
             shutil.rmtree(cfg_base.working_dir)
         except:
             pass
         try:
             shutil.rmtree(new_cfg.working_dir)
         except:
             pass
Beispiel #5
0
 def test_coverage_profile(self):
     self.cfg = Config(cfg_file = "nimportnaoik",
                       sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                       db_type = 'gembase',
                       def_dir = os.path.join(self._data_dir, 'DEF'),
                       profile_dir = os.path.join(self._data_dir, 'profiles'),
                       res_search_dir = self.tmp_dir,
                       )
     self.assertEqual( self.cfg.coverage_profile, 0.5 )
     self.tearDown()
     self.cfg = Config(cfg_file = "nimportnaoik",
                       sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                       db_type = 'gembase',
                       def_dir = os.path.join(self._data_dir, 'DEF'),
                       profile_dir = os.path.join(self._data_dir, 'profiles'),
                       coverage_profile = 0.6,
                       res_search_dir = self.tmp_dir,
                       )
     self.assertEqual( self.cfg.coverage_profile, 0.6 )
     self.tearDown()
     #coverage_profile must be a float
     kwargs = {'cfg_file' : "nimportnaoik",
               'sequence_db' : os.path.join(self._data_dir, "base", "test_base.fa"),
               'db_type' : 'gembase',
               'def_dir' : os.path.join(self._data_dir, 'DEF'),
               'profile_dir' : os.path.join(self._data_dir, 'profiles'),
               'coverage_profile' : "foo",
               'res_search_dir' : self.tmp_dir
     }
     self.assertRaises(ValueError, Config, **kwargs)
Beispiel #6
0
 def test_replicon_topology(self):
     self.cfg = Config(cfg_file = "nimportnaoik",
                       sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                       db_type = 'gembase',
                       def_dir = os.path.join(self._data_dir, 'DEF'),
                       profile_dir = os.path.join(self._data_dir, 'profiles'),
                       res_search_dir = self.tmp_dir
                       )
     self.assertEqual(self.cfg.replicon_topology, 'circular')
     self.tearDown()
     self.cfg = Config(cfg_file = "nimportnaoik",
                       sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                       db_type = 'gembase',
                       def_dir = os.path.join(self._data_dir, 'DEF'),
                       profile_dir = os.path.join(self._data_dir, 'profiles'),
                       replicon_topology = 'linear',
                       res_search_dir = self.tmp_dir
                       )
     self.assertEqual(self.cfg.replicon_topology, 'linear')
     self.tearDown()
     kwargs = {'cfg_file' : "nimportnaoik",
               'sequence_db' : os.path.join(self._data_dir, "base", "test_base.fa"),
               'db_type' : 'gembase',
               'def_dir' : os.path.join(self._data_dir, 'DEF'),
               'profile_dir' : os.path.join(self._data_dir, 'profiles'),
               'replicon_topology' : 'foo',
               'res_search_dir' : self.tmp_dir
     }
     self.assertRaises(ValueError, Config, **kwargs)
Beispiel #7
0
 def test_build_indexes(self):
     self.cfg = Config(cfg_file = "nimportnaoik",
                       sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                       db_type = 'gembase',
                       def_dir = os.path.join(self._data_dir, 'DEF'),
                       profile_dir = os.path.join(self._data_dir, 'profiles'),
                       res_search_dir = self.tmp_dir
                       )
     self.assertFalse(self.cfg.build_indexes)
     self.tearDown()
      
     kwargs = {'cfg_file' : "nimportnaoik",
               'sequence_db' : os.path.join(self._data_dir, "base", "test_base.fa"),
               'db_type' : 'gembase',
               'def_dir' : os.path.join(self._data_dir, 'DEF'),
               'profile_dir' : os.path.join(self._data_dir, 'profiles'),
               'build_indexes' : True
     }
     config = Config(
                     cfg_file = "nimportnaoik",
                     sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                     db_type = 'gembase',
                     def_dir = os.path.join(self._data_dir, 'DEF'),
                     profile_dir = os.path.join(self._data_dir, 'profiles'),
                     res_search_dir = self.tmp_dir,
                     build_indexes = True
                     )
     self.assertTrue(config.build_indexes)
 def test_sequence_db(self):
     kwargs = {'cfg_file' : "nimportnaoik",
               'db_type' : 'gembase',
               'def_dir' : os.path.join(self._data_dir, 'DEF'),
               'profile_dir' : os.path.join(self._data_dir, 'profiles'),
               'worker_nb' : '2.3' ,
               'res_search_dir' : '/tmp',
     }
     self.assertRaises(ValueError, Config, **kwargs)   
     kwargs = {'cfg_file' : "nimportnaoik",
               'sequence_db' : "foo",
               'db_type' : 'gembase',
               'def_dir' : os.path.join(self._data_dir, 'DEF'),
               'profile_dir' : os.path.join(self._data_dir, 'profiles'),
               'worker_nb' : '2.3',
               'res_search_dir' : '/tmp',
     }
     self.assertRaises(ValueError, Config, **kwargs) 
     sequence_db = os.path.join(self._data_dir, "base", "test_base.fa")
     self.cfg = Config(cfg_file = "nimportnaoik",
                       sequence_db = sequence_db,
                       db_type = 'gembase',
                       def_dir = os.path.join(self._data_dir, 'DEF'),
                       profile_dir = os.path.join(self._data_dir, 'profiles'),
                       res_search_dir = '/tmp',
                       )  
     self.assertEqual(self.cfg.sequence_db, sequence_db)
Beispiel #9
0
 def test_sequence_db(self):
     kwargs = {'cfg_file' : "nimportnaoik",
                'db_type' : 'gembase',
                'def_dir' : os.path.join(self._data_dir, 'DEF'),
                'profile_dir' : os.path.join(self._data_dir, 'profiles'),
                'worker_nb' : '2.3' ,
                'res_search_dir' : self.tmp_dir,
                'log_file' : 'NUL' if platform.system() == 'Windows' else '/dev/null'
     }
      
     self.assertRaises(ValueError, Config, **kwargs)  
     kwargs = {'cfg_file' : "nimportnaoik",
                'sequence_db' : "foo",
                'db_type' : 'gembase',
                'def_dir' : os.path.join(self._data_dir, 'DEF'),
                'profile_dir' : os.path.join(self._data_dir, 'profiles'),
                'worker_nb' : '2.3',
                'res_search_dir' : self.tmp_dir,
                'log_file' : 'NUL' if platform.system() == 'Windows' else '/dev/null'
     }
     self.assertRaises(ValueError, Config, **kwargs) 
     sequence_db = os.path.join(self._data_dir, "base", "test_base.fa")
     self.cfg = Config(cfg_file = "nimportnaoik",
                        sequence_db = sequence_db,
                        db_type = 'gembase',
                        def_dir = os.path.join(self._data_dir, 'DEF'),
                        profile_dir = os.path.join(self._data_dir, 'profiles'),
                        res_search_dir = self.tmp_dir,
                        log_file = 'NUL' if platform.system() == 'Windows' else '/dev/null'
                        )  
     self.assertEqual(self.cfg.sequence_db, sequence_db)
Beispiel #10
0
 def test_default(self):
     self.cfg = Config(cfg_file = "nimportnaoik",
                       sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                       db_type = 'gembase',
                       def_dir = os.path.join(self._data_dir, 'DEF'),
                       profile_dir = os.path.join(self._data_dir, 'profiles'),
                       res_search_dir = self.tmp_dir
                       )
     self.assertEqual(self.cfg.hmmer_exe, 'hmmsearch')
Beispiel #11
0
 def test_index_db_exe(self):
     self.cfg = Config(cfg_file = "nimportnaoik",
                       sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                       db_type = 'gembase',
                       def_dir = os.path.join(self._data_dir, 'DEF'),
                       profile_dir = os.path.join(self._data_dir, 'profiles'),
                       res_search_dir = self.tmp_dir
                       )
     self.assertEqual(self.cfg.index_db_exe, 'makeblastdb')
     self.tearDown()
     self.cfg = Config(cfg_file = "nimportnaoik",
                       sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                       db_type = 'gembase',
                       def_dir = os.path.join(self._data_dir, 'DEF'),
                       profile_dir = os.path.join(self._data_dir, 'profiles'),
                       index_db_exe = 'truc',
                       res_search_dir = self.tmp_dir
                       )
     self.assertEqual(self.cfg.index_db_exe, 'truc')
 def test_hmmer_exe(self):
     self.cfg = Config(cfg_file = "nimportnaoik",
                       sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                       db_type = 'gembase',
                       def_dir = os.path.join(self._data_dir, 'DEF'),
                       profile_dir = os.path.join(self._data_dir, 'profiles'),
                       res_search_dir = '/tmp'
                       )
     self.assertEqual(self.cfg.hmmer_exe, 'hmmsearch')
     self.tearDown()
     self.cfg = Config(cfg_file = "nimportnaoik",
                       sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                       db_type = 'gembase',
                       def_dir = os.path.join(self._data_dir, 'DEF'),
                       profile_dir = os.path.join(self._data_dir, 'profiles'),
                       hmmer_exe = 'truc',
                       res_search_dir = '/tmp',
                       )
     self.assertEqual(self.cfg.hmmer_exe, 'truc')
Beispiel #13
0
 def test_profile_suffix(self):
     self.cfg = Config(cfg_file = "nimportnaoik",
                       sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                       db_type = 'gembase',
                       def_dir = os.path.join(self._data_dir, 'DEF'),
                       profile_dir = os.path.join(self._data_dir, 'profiles'),
                       res_search_dir = self.tmp_dir
                       )
     self.assertEqual(self.cfg.profile_suffix, '.hmm')
     self.tearDown()
     profile_suffix = 'foo'
     self.cfg = Config(cfg_file = "nimportnaoik",
                       sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                       db_type = 'gembase',
                       def_dir = os.path.join(self._data_dir, 'DEF'),
                       profile_dir = os.path.join(self._data_dir, 'profiles'),
                       profile_suffix = profile_suffix,
                       res_search_dir = self.tmp_dir
                       )
     self.assertEqual(self.cfg.profile_suffix, profile_suffix)
 def test_res_extract_suffix(self):
     self.cfg = Config(cfg_file = "nimportnaoik",
                       sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                       db_type = 'gembase',
                       def_dir = os.path.join(self._data_dir, 'DEF'),
                       profile_dir = os.path.join(self._data_dir, 'profiles'),
                       res_search_dir = '/tmp',
                       )
     self.assertEqual(self.cfg.res_extract_suffix, '.res_hmm_extract')
     self.tearDown()
     res_extract_suffix = 'foo'
     self.cfg = Config(cfg_file = "nimportnaoik",
                       sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                       db_type = 'gembase',
                       def_dir = os.path.join(self._data_dir, 'DEF'),
                       profile_dir = os.path.join(self._data_dir, 'profiles'),
                       res_extract_suffix = res_extract_suffix,
                       res_search_dir = '/tmp',
                       )
     self.assertEqual(self.cfg.res_extract_suffix, res_extract_suffix)
Beispiel #15
0
 def test_res_search_suffix(self):
     self.cfg = Config(cfg_file = "nimportnaoik",
                       sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                       db_type = 'gembase',
                       def_dir = os.path.join(os.path.dirname(__file__),'..', 'data',  'DEF'),
                       profile_dir = os.path.join(self._data_dir, 'profiles'),
                       res_search_dir = self.tmp_dir
                       )
     self.assertEqual(self.cfg.res_search_suffix, '.search_hmm.out')
     self.tearDown()
     res_search_suffix = 'foo'
     self.cfg = Config(cfg_file = "nimportnaoik",
                       sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                       db_type = 'gembase',
                       def_dir = os.path.join(self._data_dir, 'DEF'),
                       profile_dir = os.path.join(self._data_dir, 'profiles'),
                       res_search_suffix = res_search_suffix,
                       res_search_dir = self.tmp_dir
                       )
     self.assertEqual(self.cfg.res_search_suffix, res_search_suffix)
Beispiel #16
0
 def test_i_value_sel(self):
     kwargs = {'cfg_file' : "nimportnaoik",
               'sequence_db' : os.path.join(self._data_dir, "base", "test_base.fa"),
               'db_type' : 'gembase',
               'def_dir' : os.path.join(self._data_dir, 'DEF'),
               'profile_dir' : os.path.join(self._data_dir, 'profiles'),
               'i_evalue_sel' : 'foo',
               'res_search_dir' : self.tmp_dir
     }
     self.assertRaises(ValueError, Config, **kwargs)
     self.cfg = Config(cfg_file = "nimportnaoik",
                       sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                       db_type = 'gembase',
                       def_dir = os.path.join(self._data_dir, 'DEF'),
                       profile_dir = os.path.join(self._data_dir, 'profiles'),
                       res_search_dir = self.tmp_dir
                       )
     self.assertEqual(self.cfg.i_evalue_sel, 0.001)
     self.tearDown()
     self.cfg = Config(cfg_file = "nimportnaoik",
                       sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                       db_type = 'gembase',
                       def_dir = os.path.join(self._data_dir, 'DEF'),
                       profile_dir = os.path.join(self._data_dir, 'profiles'),
                       i_evalue_sel = 0.7,
                       res_search_dir = self.tmp_dir
                       )
     self.assertEqual(self.cfg.i_evalue_sel, 0.7)
     self.tearDown()
     kwargs = {'cfg_file' : "nimportnaoik",
               'sequence_db' : os.path.join(self._data_dir, "base", "test_base.fa"),
               'db_type' : 'gembase',
               'def_dir' : os.path.join(self._data_dir, 'DEF'),
               'profile_dir' : os.path.join(self._data_dir, 'profiles'),
               'e_value_res' : 0.7,
               'i_evalue_sel' : 1,
               'res_search_dir' : self.tmp_dir
     }
     self.assertRaises(ValueError, Config, **kwargs)
Beispiel #17
0
 def test_min_mandatory_genes_required(self):
     min_mandatory_genes_required = (["T2SS", 32], ['Flagellum', 64])
     self.cfg = Config(cfg_file = "nimportnaoik",
                       sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                       db_type = 'gembase',
                       def_dir = os.path.join(self._data_dir, 'DEF'),
                       profile_dir = os.path.join(self._data_dir, 'profiles'),
                       min_mandatory_genes_required = min_mandatory_genes_required,
                       res_search_dir = self.tmp_dir
                       )
     self.assertEqual(self.cfg.min_mandatory_genes_required('T2SS'), 32)
     self.assertEqual(self.cfg.min_mandatory_genes_required('Flagellum'), 64)
     self.assertIsNone(self.cfg.min_mandatory_genes_required('Foo'))
Beispiel #18
0
 def test_multi_loci(self):
     multi_loci = "T2SS,Flagellum"
     self.cfg = Config(cfg_file = "nimportnaoik",
                      sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                      db_type = 'gembase',
                      def_dir = os.path.join(self._data_dir, 'DEF'),
                      profile_dir = os.path.join(self._data_dir, 'profiles'),
                      multi_loci = multi_loci,
                      res_search_dir = self.tmp_dir 
                      )
     self.assertTrue(self.cfg.multi_loci('T2SS'))
     self.assertTrue(self.cfg.multi_loci('Flagellum'))
     self.assertFalse(self.cfg.multi_loci('Foo'))
 def test_max_nb_genes(self):
     max_nb_genes = (["T2SS", 32], ['Flagellum', 64])
     self.cfg = Config(cfg_file = "nimportnaoik",
                       sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                       db_type = 'gembase',
                       def_dir = os.path.join(self._data_dir, 'DEF'),
                       profile_dir = os.path.join(self._data_dir, 'profiles'),
                       max_nb_genes = max_nb_genes,
                       res_search_dir = '/tmp',
                       )
     self.assertEqual(self.cfg.max_nb_genes('T2SS'), 32)
     self.assertEqual(self.cfg.max_nb_genes('Flagellum'), 64)
     self.assertIsNone(self.cfg.max_nb_genes('Foo'))
Beispiel #20
0
 def test_inter_gene_max_space(self):
     inter_gene_max_space = (["T2SS", 32], ['Flagellum', 64])
     self.cfg = Config(cfg_file = "nimportnaoik",
                       sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                       db_type = 'gembase',
                       def_dir = os.path.join(self._data_dir, 'DEF'),
                       profile_dir = os.path.join(self._data_dir, 'profiles'),
                       inter_gene_max_space = inter_gene_max_space,
                       res_search_dir = self.tmp_dir
                       )
     self.assertEqual(self.cfg.inter_gene_max_space('T2SS'), 32)
     self.assertEqual(self.cfg.inter_gene_max_space('Flagellum'), 64)
     self.assertIsNone(self.cfg.inter_gene_max_space('Foo'))
Beispiel #21
0
 def test_profile_dir(self):
     kwargs = {'cfg_file' : "nimportnaoik",
               'sequence_db' : os.path.join(self._data_dir, "base", "test_base.fa"),
               'db_type' : 'gembase',
               'def_dir' : os.path.join(self._data_dir, 'DEF'),
               'profile_dir' : 'foo',
               'res_search_dir' : self.tmp_dir
     }
     self.assertRaises(ValueError, Config, **kwargs)
     profile_dir = os.path.join(os.path.dirname(__file__), '..', 'data', 'profiles')
     self.cfg = Config(cfg_file = "nimportnaoik",
                       sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                       db_type = 'gembase',
                       def_dir = os.path.join(self._data_dir, 'DEF'),
                       profile_dir = profile_dir,
                       res_search_dir = self.tmp_dir
                       )
     self.assertEqual(self.cfg.profile_dir, profile_dir)
 def test_db_type(self):
     self.cfg = Config(cfg_file = "nimportnaoik",
                       sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                       db_type = 'gembase',
                       def_dir = os.path.join(self._data_dir, 'DEF'),
                       profile_dir = os.path.join(self._data_dir, 'profiles'),
                       res_search_dir = '/tmp',
                       )
     self.assertEqual( self.cfg.db_type, 'gembase')
     self.tearDown()
     kwargs = {'cfg_file' : "nimportnaoik",
               'sequence_db' : os.path.join(self._data_dir, "base", "test_base.fa"),
               'db_type' : 'foo',
               'def_dir' : os.path.join(self._data_dir, 'DEF'),
               'profile_dir' : os.path.join(self._data_dir, 'profiles'),
               'res_search_dir' : '/tmp',
     }
     self.assertRaises(ValueError, Config, **kwargs)
Beispiel #23
0
 def test_res_search_dir(self):
     kwargs = {'cfg_file' : "nimportnaoik",
               'sequence_db' : os.path.join(self._data_dir, "base", "test_base.fa"),
               'db_type' : 'gembase',
               'def_dir' : os.path.join(self._data_dir, 'DEF'),
               'profile_dir' : os.path.join(self._data_dir, 'profiles'),
               'res_search_dir' : 'foo',
               'log_file' : 'NUL' if platform.system() == 'Windows' else '/dev/null'
     }
     self.assertRaises(ValueError, Config, **kwargs)
     self.tearDown()
     res_search_dir = os.path.join(os.path.dirname(__file__), 'datatest')
     self.cfg = Config(cfg_file = "nimportnaoik",
                       sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                       db_type = 'gembase',
                       def_dir = os.path.join(self._data_dir, 'DEF'),
                       profile_dir = os.path.join(self._data_dir, 'profiles'),
                       res_search_dir = res_search_dir,
                       log_file = 'NUL' if platform.system() == 'Windows' else '/dev/null'
                       )
     self.assertEqual(self.cfg.res_search_dir, res_search_dir)
Beispiel #24
0
 def test_models_dir(self):
     self.parsed_args.models_dir = self.tmp_dir
     cfg = Config(self.defaults, self.parsed_args)
     self.assertEqual(cfg.models_dir(), [self.tmp_dir])
Beispiel #25
0
 def test_working_dir(self):
     cfg = Config(self.defaults, self.parsed_args)
     self.assertEqual(cfg.out_dir(), cfg.working_dir())
Beispiel #26
0
 def test_bad_topology(self):
     self.parsed_args.replicon_topology = "FOO"
     with self.assertRaises(ValueError) as ctx:
         Config(self.defaults, self.parsed_args)
     self.assertEqual(str(ctx.exception),
                      "replicon_topology as unauthorized value : 'FOO'.")
Beispiel #27
0
 def test_bad_db_type(self):
     self.parsed_args.db_type = "FOO"
     with self.assertRaises(ValueError) as ctx:
         Config(self.defaults, self.parsed_args)
     self.assertEqual(str(ctx.exception),
                      "db_type as unauthorized value : 'FOO'.")
    def setUp(self):
        self.args = argparse.Namespace()
        self.args.db_type = 'gembase'
        self.args.models_dir = self.find_data('models')
        self.args.res_search_dir = tempfile.gettempdir()
        self.args.log_level = 30
        self.args.out_dir = os.path.join(self.args.res_search_dir,
                                         'test_macsyfinder_repliconDB')
        if os.path.exists(self.args.out_dir):
            shutil.rmtree(self.args.out_dir)
        os.mkdir(self.args.out_dir)

        seq_db = self.find_data("base", "test_base.fa")
        shutil.copy(seq_db, self.args.out_dir)
        self.args.sequence_db = os.path.join(self.args.out_dir,
                                             os.path.basename(seq_db))
        self.cfg = Config(MacsyDefaults(), self.args)

        self.ESCO030p01_genes = [('000010', '886'), ('000020', '291'),
                                 ('000030', '656'), ('000040', '500'),
                                 ('000050', '407'), ('000060', '144'),
                                 ('000070', '183'), ('000080', '121'),
                                 ('000090', '199'), ('000100', '325'),
                                 ('000110', '425'), ('000120', '171'),
                                 ('000130', '277'), ('000140', '133'),
                                 ('000150', '108'), ('000160', '295'),
                                 ('000170', '273'), ('000180', '367'),
                                 ('000190', '573'), ('000200', '343'),
                                 ('000210', '295'), ('000220', '108'),
                                 ('000230', '117'), ('000240', '153'),
                                 ('000250', '479'), ('000260', '706'),
                                 ('000270', '998'), ('000280', '171'),
                                 ('000290', '108'), ('000300', '295'),
                                 ('000310', '165'), ('000320', '243'),
                                 ('000330', '295'), ('000340', '108'),
                                 ('000350', '1755'), ('000360', '248'),
                                 ('000370', '286'), ('000380', '186'),
                                 ('000390', '83'), ('000400', '153'),
                                 ('000410', '69'), ('000420', '295'),
                                 ('000430', '108'), ('000440', '145'),
                                 ('000450', '59'), ('000460', '124'),
                                 ('000470', '246'), ('000480', '325'),
                                 ('000490', '54'), ('000500', '95'),
                                 ('000510', '83'), ('000520', '56'),
                                 ('000530', '401'), ('000540', '320'),
                                 ('000550', '256'), ('000560', '73'),
                                 ('000570', '144'), ('000580', '258'),
                                 ('000590', '133'), ('000600', '140'),
                                 ('000610', '63'), ('000620', '138'),
                                 ('000630', '68'), ('000640', '169'),
                                 ('000650', '127'), ('000660', '295'),
                                 ('000670', '108'), ('000670', '108')]

        self.PSAE001c01_genes = [('006940', '803'), ('013980', '759'),
                                 ('017350', '600'), ('018920', '776'),
                                 ('026600', '273'), ('031420', '658'),
                                 ('043580', '416'), ('051090', '714'),
                                 ('055870', '449'), ('055880', '447'),
                                 ('055890', '588'), ('055900', '292'),
                                 ('055910', '262'), ('055920', '166'),
                                 ('055930', '288'), ('055940', '194'),
                                 ('055950', '567'), ('055960', '188'),
                                 ('055970', '247'), ('055980', '252'),
                                 ('055990', '455'), ('056000', '450'),
                                 ('056010', '260'), ('056020', '246'),
                                 ('056030', '70'), ('056040', '133'),
                                 ('056050', '284'), ('056060', '585'),
                                 ('056070', '435'), ('056080', '342'),
                                 ('056090', '252'), ('056100', '122'),
                                 ('056110', '213'), ('056120', '400'),
                                 ('056130', '134'), ('056140', '138'),
                                 ('056150', '397'), ('056160', '298'),
                                 ('056170', '186'), ('056180', '445'),
                                 ('056190', '414'), ('056200', '132'),
                                 ('056210', '674'), ('056220', '319'),
                                 ('056230', '394'), ('056240', '207'),
                                 ('056250', '401'), ('056260', '611'),
                                 ('056270', '257'), ('056280', '169'),
                                 ('056290', '454'), ('056300', '141'),
                                 ('056310', '458'), ('056320', '286'),
                                 ('056330', '514'), ('056340', '178'),
                                 ('056350', '156'), ('056360', '85'),
                                 ('056370', '289'), ('056380', '126'),
                                 ('056390', '290'), ('056400', '262'),
                                 ('056410', '214'), ('056420', '630'),
                                 ('056430', '127'), ('056440', '455'),
                                 ('056440', '455')]
        self.NCDB_genes = [('056134', '289'), ('056135', '126'),
                           ('056136', '290'), ('056137', '262'),
                           ('056138', '214'), ('056139', '630'),
                           ('056140', '127'), ('056141', '803'),
                           ('056141', '803')]

        idx = Indexes(self.cfg)
        idx._build_my_indexes()
class Test(MacsyTest):
    def __init__(self, methodName='runTest'):
        super(Test, self).__init__(methodName)

        def fake_init(obj, cfg):
            obj.cfg = cfg
            idx = Indexes(cfg)
            obj.sequence_idx = idx.find_my_indexes()
            obj.topology_file = cfg.topology_file()
            obj._DB = {}

        self.fake_init = fake_init
        self.real_init = RepliconDB.__init__

    def setUp(self):
        self.args = argparse.Namespace()
        self.args.db_type = 'gembase'
        self.args.models_dir = self.find_data('models')
        self.args.res_search_dir = tempfile.gettempdir()
        self.args.log_level = 30
        self.args.out_dir = os.path.join(self.args.res_search_dir,
                                         'test_macsyfinder_repliconDB')
        if os.path.exists(self.args.out_dir):
            shutil.rmtree(self.args.out_dir)
        os.mkdir(self.args.out_dir)

        seq_db = self.find_data("base", "test_base.fa")
        shutil.copy(seq_db, self.args.out_dir)
        self.args.sequence_db = os.path.join(self.args.out_dir,
                                             os.path.basename(seq_db))
        self.cfg = Config(MacsyDefaults(), self.args)

        self.ESCO030p01_genes = [('000010', '886'), ('000020', '291'),
                                 ('000030', '656'), ('000040', '500'),
                                 ('000050', '407'), ('000060', '144'),
                                 ('000070', '183'), ('000080', '121'),
                                 ('000090', '199'), ('000100', '325'),
                                 ('000110', '425'), ('000120', '171'),
                                 ('000130', '277'), ('000140', '133'),
                                 ('000150', '108'), ('000160', '295'),
                                 ('000170', '273'), ('000180', '367'),
                                 ('000190', '573'), ('000200', '343'),
                                 ('000210', '295'), ('000220', '108'),
                                 ('000230', '117'), ('000240', '153'),
                                 ('000250', '479'), ('000260', '706'),
                                 ('000270', '998'), ('000280', '171'),
                                 ('000290', '108'), ('000300', '295'),
                                 ('000310', '165'), ('000320', '243'),
                                 ('000330', '295'), ('000340', '108'),
                                 ('000350', '1755'), ('000360', '248'),
                                 ('000370', '286'), ('000380', '186'),
                                 ('000390', '83'), ('000400', '153'),
                                 ('000410', '69'), ('000420', '295'),
                                 ('000430', '108'), ('000440', '145'),
                                 ('000450', '59'), ('000460', '124'),
                                 ('000470', '246'), ('000480', '325'),
                                 ('000490', '54'), ('000500', '95'),
                                 ('000510', '83'), ('000520', '56'),
                                 ('000530', '401'), ('000540', '320'),
                                 ('000550', '256'), ('000560', '73'),
                                 ('000570', '144'), ('000580', '258'),
                                 ('000590', '133'), ('000600', '140'),
                                 ('000610', '63'), ('000620', '138'),
                                 ('000630', '68'), ('000640', '169'),
                                 ('000650', '127'), ('000660', '295'),
                                 ('000670', '108'), ('000670', '108')]

        self.PSAE001c01_genes = [('006940', '803'), ('013980', '759'),
                                 ('017350', '600'), ('018920', '776'),
                                 ('026600', '273'), ('031420', '658'),
                                 ('043580', '416'), ('051090', '714'),
                                 ('055870', '449'), ('055880', '447'),
                                 ('055890', '588'), ('055900', '292'),
                                 ('055910', '262'), ('055920', '166'),
                                 ('055930', '288'), ('055940', '194'),
                                 ('055950', '567'), ('055960', '188'),
                                 ('055970', '247'), ('055980', '252'),
                                 ('055990', '455'), ('056000', '450'),
                                 ('056010', '260'), ('056020', '246'),
                                 ('056030', '70'), ('056040', '133'),
                                 ('056050', '284'), ('056060', '585'),
                                 ('056070', '435'), ('056080', '342'),
                                 ('056090', '252'), ('056100', '122'),
                                 ('056110', '213'), ('056120', '400'),
                                 ('056130', '134'), ('056140', '138'),
                                 ('056150', '397'), ('056160', '298'),
                                 ('056170', '186'), ('056180', '445'),
                                 ('056190', '414'), ('056200', '132'),
                                 ('056210', '674'), ('056220', '319'),
                                 ('056230', '394'), ('056240', '207'),
                                 ('056250', '401'), ('056260', '611'),
                                 ('056270', '257'), ('056280', '169'),
                                 ('056290', '454'), ('056300', '141'),
                                 ('056310', '458'), ('056320', '286'),
                                 ('056330', '514'), ('056340', '178'),
                                 ('056350', '156'), ('056360', '85'),
                                 ('056370', '289'), ('056380', '126'),
                                 ('056390', '290'), ('056400', '262'),
                                 ('056410', '214'), ('056420', '630'),
                                 ('056430', '127'), ('056440', '455'),
                                 ('056440', '455')]
        self.NCDB_genes = [('056134', '289'), ('056135', '126'),
                           ('056136', '290'), ('056137', '262'),
                           ('056138', '214'), ('056139', '630'),
                           ('056140', '127'), ('056141', '803'),
                           ('056141', '803')]

        idx = Indexes(self.cfg)
        idx._build_my_indexes()

    def tearDown(self):
        try:
            shutil.rmtree(self.cfg.working_dir())
        except:
            pass
        RepliconDB.__init__ = self.real_init

    def test_fill_topology(self):
        self.args.topology_file = self.args.sequence_db + ".topo"
        db_send = {'ESCO030p01': 'circular', 'PSAE001c01': 'linear'}
        with open(self.args.topology_file, 'w') as f:
            for k, v in list(db_send.items()):
                f.write('{0} : {1}\n'.format(k, v))

        cfg = Config(MacsyDefaults(), self.args)
        RepliconDB.__init__ = self.fake_init
        db = RepliconDB(cfg)
        rcv_topo = db._fill_topology()
        self.assertDictEqual(db_send, rcv_topo)

    def test_fill_ordered_replicon_min_max(self):
        seq_ori = self.find_data("base", "ordered_replicon_base.fasta")
        shutil.copy(seq_ori, self.args.out_dir)
        self.args.sequence_db = os.path.join(self.args.out_dir,
                                             os.path.basename(seq_ori))
        cfg = Config(MacsyDefaults(), self.args)

        idx = Indexes(cfg)
        idx._build_my_indexes()
        RepliconDB.__init__ = self.fake_init
        db = RepliconDB(cfg)
        db._fill_ordered_min_max(cfg.replicon_topology())

        self.assertEqual(len(db._DB), 1)
        rep = db[RepliconDB.ordered_replicon_name]
        self.assertEqual(rep.topology, cfg.replicon_topology())
        self.assertEqual(rep.min, 1)
        self.assertEqual(rep.max, 52)

    def test_fill_gembase_min_max_default_topology(self):
        RepliconDB.__init__ = self.fake_init
        db = RepliconDB(self.cfg)
        db._fill_gembase_min_max({}, self.cfg.replicon_topology())
        self.assertEqual(len(db._DB), 3)
        self.assertEqual(set(db._DB.keys()),
                         set(['ESCO030p01', 'PSAE001c01', 'NC_xxxxx_xx']))
        PRRU001c01 = db['ESCO030p01']
        self.assertEqual(PRRU001c01.topology, 'circular')
        self.assertEqual(PRRU001c01.min, 1)
        self.assertEqual(PRRU001c01.max, 67)
        self.assertEqual(PRRU001c01.genes, self.ESCO030p01_genes)
        PSAE001c01 = db['PSAE001c01']
        self.assertEqual(PSAE001c01.topology, 'circular')
        self.assertEqual(PSAE001c01.min, 68)
        self.assertEqual(PSAE001c01.max, 133)
        self.assertEqual(PSAE001c01.genes, self.PSAE001c01_genes)
        DBNC = db['NC_xxxxx_xx']
        self.assertEqual(DBNC.topology, 'circular')
        self.assertEqual(DBNC.min, 134)
        self.assertEqual(DBNC.max, 141)
        self.assertEqual(DBNC.genes, self.NCDB_genes)

    def test_fill_gembase_min_max_with_topology(self):
        self.args.topology_file = self.args.sequence_db + ".topo"
        with open(self.args.topology_file, 'w') as f:
            f.write(
                '# topology file\nESCO030p01 : circular\nPSAE001c01 : linear\n'
            )
        cfg = Config(MacsyDefaults(), self.args)
        RepliconDB.__init__ = self.fake_init
        db = RepliconDB(cfg)
        topo_dict = db._fill_topology()
        db._fill_gembase_min_max(topo_dict, 'circular')
        self.assertEqual(len(db._DB), 3)
        self.assertEqual(set(db._DB.keys()),
                         set(['ESCO030p01', 'PSAE001c01', 'NC_xxxxx_xx']))
        ESCO030p01 = db['ESCO030p01']
        self.assertEqual(ESCO030p01.topology, 'circular')
        self.assertEqual(ESCO030p01.min, 1)
        self.assertEqual(ESCO030p01.max, 67)
        self.assertEqual(ESCO030p01.genes, self.ESCO030p01_genes)
        PSAE001c01 = db['PSAE001c01']
        self.assertEqual(PSAE001c01.topology, 'linear')
        self.assertEqual(PSAE001c01.min, 68)
        self.assertEqual(PSAE001c01.max, 133)
        self.assertEqual(PSAE001c01.genes, self.PSAE001c01_genes)
        DBNC = db['NC_xxxxx_xx']
        self.assertEqual(DBNC.topology, 'circular')
        self.assertEqual(DBNC.min, 134)
        self.assertEqual(DBNC.max, 141)
        self.assertEqual(DBNC.genes, self.NCDB_genes)

    def test_in(self):
        db = RepliconDB(self.cfg)
        self.assertIn('ESCO030p01', db)
        self.assertIn('PSAE001c01', db)
        self.assertIn('NC_xxxxx_xx', db)
        self.assertNotIn('toto', db)

    def test_getitem(self):
        db = RepliconDB(self.cfg)
        ESCO030p01 = RepliconInfo(self.cfg.replicon_topology(), 1, 67,
                                  self.ESCO030p01_genes)
        PSAE001c01 = RepliconInfo(self.cfg.replicon_topology(), 68, 133,
                                  self.PSAE001c01_genes)
        NCXX = RepliconInfo("circular", 134, 141, self.NCDB_genes)
        self.assertEqual(ESCO030p01, db['ESCO030p01'])
        self.assertEqual(PSAE001c01, db['PSAE001c01'])
        self.assertEqual(NCXX, db['NC_xxxxx_xx'])
        self.assertRaises(KeyError, db.__getitem__, 'foo')

    def test_get(self):
        db = RepliconDB(self.cfg)
        ESCO030p01 = RepliconInfo(self.cfg.replicon_topology(), 1, 67,
                                  self.ESCO030p01_genes)
        PSAE001c01 = RepliconInfo(self.cfg.replicon_topology(), 68, 133,
                                  self.PSAE001c01_genes)
        NCXX = RepliconInfo("circular", 134, 141, self.NCDB_genes)
        self.assertEqual(ESCO030p01, db.get('ESCO030p01'))
        self.assertEqual(PSAE001c01, db.get('PSAE001c01'))
        self.assertEqual(NCXX, db.get('NC_xxxxx_xx', 'foo'))
        self.assertIsNone(db.get('foo'))
        self.assertEqual('bar', db.get('foo', 'bar'))

    def test_items(self):
        db = RepliconDB(self.cfg)
        ESCO030p01 = RepliconInfo(self.cfg.replicon_topology(), 1, 67,
                                  self.ESCO030p01_genes)
        PSAE001c01 = RepliconInfo(self.cfg.replicon_topology(), 68, 133,
                                  self.PSAE001c01_genes)
        NCXX = RepliconInfo("circular", 134, 141, self.NCDB_genes)
        self.assertCountEqual(list(db.items()), [('ESCO030p01', ESCO030p01),
                                                 ('NC_xxxxx_xx', NCXX),
                                                 ('PSAE001c01', PSAE001c01)])

    def test_iteritems(self):
        db = RepliconDB(self.cfg)
        ESCO030p01 = RepliconInfo(self.cfg.replicon_topology(), 1, 67,
                                  self.ESCO030p01_genes)
        PSAE001c01 = RepliconInfo(self.cfg.replicon_topology(), 68, 133,
                                  self.PSAE001c01_genes)
        NCXX = RepliconInfo("circular", 134, 141, self.NCDB_genes)
        self.assertCountEqual(iter(db.items()), [('ESCO030p01', ESCO030p01),
                                                 ('NC_xxxxx_xx', NCXX),
                                                 ('PSAE001c01', PSAE001c01)])

    def test_replicon_infos(self):
        db = RepliconDB(self.cfg)
        ESCO030p01 = RepliconInfo(self.cfg.replicon_topology(), 1, 67,
                                  self.ESCO030p01_genes)
        PSAE001c01 = RepliconInfo(self.cfg.replicon_topology(), 68, 133,
                                  self.PSAE001c01_genes)
        NCXX = RepliconInfo("circular", 134, 141, self.NCDB_genes)
        values = db.replicon_infos()
        self.assertCountEqual(values, [ESCO030p01, NCXX, PSAE001c01])
class TestSearchGenes(MacsyTest):
    def setUp(self):
        self.tmp_dir = os.path.join(tempfile.gettempdir(),
                                    'test_macsyfinder_search_genes')
        if os.path.exists(self.tmp_dir):
            shutil.rmtree(self.tmp_dir)
        os.mkdir(self.tmp_dir)

        args = argparse.Namespace()
        args.sequence_db = self.find_data("base", "test_base.fa")
        args.db_type = 'gembase'
        args.models_dir = self.find_data('models')
        args.log_level = 30
        args.out_dir = os.path.join(self.tmp_dir, 'job_1')
        args.res_search_dir = args.out_dir
        os.mkdir(args.out_dir)

        self.cfg = Config(MacsyDefaults(), args)

        self.model_name = 'foo'
        self.model_location = ModelLocation(
            path=os.path.join(args.models_dir, self.model_name))

        idx = Indexes(self.cfg)
        idx._build_my_indexes()
        self.profile_factory = ProfileFactory(self.cfg)

    def tearDown(self):
        try:
            shutil.rmtree(self.cfg.working_dir())
            #pass
        except:
            pass

    @unittest.skipIf(not which('hmmsearch'), 'hmmsearch not found in PATH')
    def test_search(self):
        gene_name = "abc"
        c_gene_abc = CoreGene(self.model_location, gene_name,
                              self.profile_factory)
        report = search_genes([c_gene_abc], self.cfg)
        expected_hit = [
            Hit(c_gene_abc, "ESCO030p01_000260", 706, "ESCO030p01", 26,
                float(1.000e-200), float(660.800), float(1.000), float(0.714),
                160, 663)
        ]
        self.assertEqual(len(report), 1)
        self.assertEqual(expected_hit[0], report[0].hits[0])

    @unittest.skipIf(not which('hmmsearch'), 'hmmsearch not found in PATH')
    def test_search_recover(self):
        # first job searching using hmmsearch
        gene_name = "abc"
        c_gene_abc = CoreGene(self.model_location, gene_name,
                              self.profile_factory)
        report = search_genes([c_gene_abc], self.cfg)
        expected_hit = [
            Hit(c_gene_abc, "ESCO030p01_000260", 706, "ESCO030p01", 26,
                float(1.000e-200), float(660.800), float(1.000), float(0.714),
                160, 663)
        ]

        # second job using recover
        # disable hmmer to be sure that test use the recover inner function
        self.cfg.hmmer = lambda: "hmmer_disable"
        # and create a new dir for the second job
        previous_job_path = self.cfg.working_dir()
        self.cfg.previous_run = lambda: previous_job_path
        self.cfg.out_dir = lambda: os.path.join(self.tmp_dir, 'job_2')
        os.mkdir(self.cfg.out_dir())

        # rerun with previous run
        # but we have to reset the profile attached to the gene gene._profile._report
        self.profile_factory = ProfileFactory(self.cfg)
        c_gene_abc = CoreGene(self.model_location, gene_name,
                              self.profile_factory)
        report = search_genes([c_gene_abc], self.cfg)
        self.assertEqual(len(report), 1)
        self.assertEqual(expected_hit[0], report[0].hits[0])
Beispiel #31
0
class Test(unittest.TestCase):

    _data_dir = os.path.join(os.path.dirname(__file__), "datatest")
    
    def setUp(self):
        l = logging.getLogger()
        l.manager.loggerDict.clear()
        if hasattr(self, 'tmp_dir'):
            try:
                shutil.rmtree(self.cfg.working_dir)
            except Exception as err:
                pass
        self.tmp_dir = tempfile.gettempdir()
        
        
    def tearDown(self):
        logging.shutdown()
        l = logging.getLogger()
        l.manager.loggerDict.clear()
        if hasattr(self, 'cfg'):
            try:
                shutil.rmtree(self.cfg.working_dir)
            except Exception as err:
                pass


    def test_build_indexes(self):
        self.cfg = Config(cfg_file = "nimportnaoik",
                          sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                          db_type = 'gembase',
                          def_dir = os.path.join(self._data_dir, 'DEF'),
                          profile_dir = os.path.join(self._data_dir, 'profiles'),
                          res_search_dir = self.tmp_dir
                          )
        self.assertFalse(self.cfg.build_indexes)
        self.tearDown()
         
        kwargs = {'cfg_file' : "nimportnaoik",
                  'sequence_db' : os.path.join(self._data_dir, "base", "test_base.fa"),
                  'db_type' : 'gembase',
                  'def_dir' : os.path.join(self._data_dir, 'DEF'),
                  'profile_dir' : os.path.join(self._data_dir, 'profiles'),
                  'build_indexes' : True
        }
        config = Config(
                        cfg_file = "nimportnaoik",
                        sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                        db_type = 'gembase',
                        def_dir = os.path.join(self._data_dir, 'DEF'),
                        profile_dir = os.path.join(self._data_dir, 'profiles'),
                        res_search_dir = self.tmp_dir,
                        build_indexes = True
                        )
        self.assertTrue(config.build_indexes)
 
 
    def test_default(self):
        self.cfg = Config(cfg_file = "nimportnaoik",
                          sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                          db_type = 'gembase',
                          def_dir = os.path.join(self._data_dir, 'DEF'),
                          profile_dir = os.path.join(self._data_dir, 'profiles'),
                          res_search_dir = self.tmp_dir
                          )
        self.assertEqual(self.cfg.hmmer_exe, 'hmmsearch')
 
 
    def test_coverage_profile(self):
        self.cfg = Config(cfg_file = "nimportnaoik",
                          sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                          db_type = 'gembase',
                          def_dir = os.path.join(self._data_dir, 'DEF'),
                          profile_dir = os.path.join(self._data_dir, 'profiles'),
                          res_search_dir = self.tmp_dir,
                          )
        self.assertEqual( self.cfg.coverage_profile, 0.5 )
        self.tearDown()
        self.cfg = Config(cfg_file = "nimportnaoik",
                          sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                          db_type = 'gembase',
                          def_dir = os.path.join(self._data_dir, 'DEF'),
                          profile_dir = os.path.join(self._data_dir, 'profiles'),
                          coverage_profile = 0.6,
                          res_search_dir = self.tmp_dir,
                          )
        self.assertEqual( self.cfg.coverage_profile, 0.6 )
        self.tearDown()
        #coverage_profile must be a float
        kwargs = {'cfg_file' : "nimportnaoik",
                  'sequence_db' : os.path.join(self._data_dir, "base", "test_base.fa"),
                  'db_type' : 'gembase',
                  'def_dir' : os.path.join(self._data_dir, 'DEF'),
                  'profile_dir' : os.path.join(self._data_dir, 'profiles'),
                  'coverage_profile' : "foo",
                  'res_search_dir' : self.tmp_dir
        }
        self.assertRaises(ValueError, Config, **kwargs)
 
 
    def test_def_dir(self):
        kwargs = {'cfg_file' : "nimportnaoik",
                  'sequence_db' : os.path.join(self._data_dir, "base", "test_base.fa"),
                  'db_type' : 'gembase',
                  'profile_dir' : os.path.join(self._data_dir, 'profiles'),
                  'def_dir': '/kjhdsjkg938268235764kjdsg',
                  'res_search_dir' : self.tmp_dir
                  }
        real_def_dir = os.path.join(os.path.dirname(__file__), '..', 'data', 'DEF'),
        self.assertRaises(ValueError, Config, **kwargs)
 
        def_dir = os.path.join(tempfile.gettempdir(), 'macsyfinder_DEF')
        if not os.path.exists(def_dir):
            os.mkdir(def_dir)
        self.cfg = Config(cfg_file = "nimportnaoik",
                          sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                          db_type = 'gembase',
                          def_dir = def_dir,
                          profile_dir = os.path.join(self._data_dir, 'profiles'),
                          res_search_dir = self.tmp_dir
                          ) 
        self.assertEqual(def_dir, self.cfg.def_dir)
        shutil.rmtree(def_dir)
        self.tearDown()
        def_dir = os.path.join(os.path.dirname(__file__),'..', 'data',  'DEF')
        self.cfg = Config(cfg_file = "nimportnaoik",
                          sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                          db_type = 'gembase',
                          def_dir = def_dir,
                          profile_dir = os.path.join(self._data_dir, 'profiles'),
                          res_search_dir = self.tmp_dir
                          )  
        self.assertEqual(def_dir, self.cfg.def_dir)


    def test_e_value_res(self):
        kwargs = {'cfg_file' : "nimportnaoik",
                  'sequence_db' : os.path.join(self._data_dir, "base", "test_base.fa"),
                  'db_type' : 'gembase',
                  'def_dir' : os.path.join(self._data_dir, 'DEF'),
                  'profile_dir' : os.path.join(self._data_dir, 'profiles'),
                  'e_value_res' : 'foo',
                  'res_search_dir' : self.tmp_dir
        }
        self.assertRaises(ValueError, Config, **kwargs)
        self.cfg = Config(cfg_file = "nimportnaoik",
                          sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                          db_type = 'gembase',
                          def_dir = os.path.join(self._data_dir, 'DEF'),
                          profile_dir = os.path.join(self._data_dir, 'profiles'),
                          res_search_dir = self.tmp_dir
                          )
        self.assertEqual(self.cfg.e_value_res, 1)
        self.tearDown()
        self.cfg = Config(cfg_file = "nimportnaoik",
                          sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                          db_type = 'gembase',
                          def_dir = os.path.join(self._data_dir, 'DEF'),
                          profile_dir = os.path.join(self._data_dir, 'profiles'),
                          e_value_res = 0.7,
                          res_search_dir = self.tmp_dir
                          )
        self.assertEqual(self.cfg.e_value_res, 0.7)
        self.tearDown()
        kwargs = {'cfg_file' : "nimportnaoik",
                  'sequence_db' : os.path.join(self._data_dir, "base", "test_base.fa"),
                  'db_type' : 'gembase',
                  'def_dir' : os.path.join(self._data_dir, 'DEF'),
                  'profile_dir' : os.path.join(self._data_dir, 'profiles'),
                  'e_value_res' : 0.7,
                  'i_evalue_sel' : 1,
                  'res_search_dir' : self.tmp_dir
        }
        self.assertRaises(ValueError, Config, **kwargs)
 
 
    def test_hmmer_exe(self):
        self.cfg = Config(cfg_file = "nimportnaoik",
                          sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                          db_type = 'gembase',
                          def_dir = os.path.join(self._data_dir, 'DEF'),
                          profile_dir = os.path.join(self._data_dir, 'profiles'),
                          res_search_dir = self.tmp_dir
                          )
        self.assertEqual(self.cfg.hmmer_exe, 'hmmsearch')
        self.tearDown()
        self.cfg = Config(cfg_file = "nimportnaoik",
                          sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                          db_type = 'gembase',
                          def_dir = os.path.join(self._data_dir, 'DEF'),
                          profile_dir = os.path.join(self._data_dir, 'profiles'),
                          hmmer_exe = 'truc',
                          res_search_dir = self.tmp_dir
                          )
        self.assertEqual(self.cfg.hmmer_exe, 'truc')
 
 
    def test_index_db_exe(self):
        self.cfg = Config(cfg_file = "nimportnaoik",
                          sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                          db_type = 'gembase',
                          def_dir = os.path.join(self._data_dir, 'DEF'),
                          profile_dir = os.path.join(self._data_dir, 'profiles'),
                          res_search_dir = self.tmp_dir
                          )
        self.assertEqual(self.cfg.index_db_exe, 'makeblastdb')
        self.tearDown()
        self.cfg = Config(cfg_file = "nimportnaoik",
                          sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                          db_type = 'gembase',
                          def_dir = os.path.join(self._data_dir, 'DEF'),
                          profile_dir = os.path.join(self._data_dir, 'profiles'),
                          index_db_exe = 'truc',
                          res_search_dir = self.tmp_dir
                          )
        self.assertEqual(self.cfg.index_db_exe, 'truc')
 
 
    def test_i_value_sel(self):
        kwargs = {'cfg_file' : "nimportnaoik",
                  'sequence_db' : os.path.join(self._data_dir, "base", "test_base.fa"),
                  'db_type' : 'gembase',
                  'def_dir' : os.path.join(self._data_dir, 'DEF'),
                  'profile_dir' : os.path.join(self._data_dir, 'profiles'),
                  'i_evalue_sel' : 'foo',
                  'res_search_dir' : self.tmp_dir
        }
        self.assertRaises(ValueError, Config, **kwargs)
        self.cfg = Config(cfg_file = "nimportnaoik",
                          sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                          db_type = 'gembase',
                          def_dir = os.path.join(self._data_dir, 'DEF'),
                          profile_dir = os.path.join(self._data_dir, 'profiles'),
                          res_search_dir = self.tmp_dir
                          )
        self.assertEqual(self.cfg.i_evalue_sel, 0.001)
        self.tearDown()
        self.cfg = Config(cfg_file = "nimportnaoik",
                          sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                          db_type = 'gembase',
                          def_dir = os.path.join(self._data_dir, 'DEF'),
                          profile_dir = os.path.join(self._data_dir, 'profiles'),
                          i_evalue_sel = 0.7,
                          res_search_dir = self.tmp_dir
                          )
        self.assertEqual(self.cfg.i_evalue_sel, 0.7)
        self.tearDown()
        kwargs = {'cfg_file' : "nimportnaoik",
                  'sequence_db' : os.path.join(self._data_dir, "base", "test_base.fa"),
                  'db_type' : 'gembase',
                  'def_dir' : os.path.join(self._data_dir, 'DEF'),
                  'profile_dir' : os.path.join(self._data_dir, 'profiles'),
                  'e_value_res' : 0.7,
                  'i_evalue_sel' : 1,
                  'res_search_dir' : self.tmp_dir
        }
        self.assertRaises(ValueError, Config, **kwargs)


    def test_db_type(self):
        self.cfg = Config(cfg_file = "nimportnaoik",
                          sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                          db_type = 'gembase',
                          def_dir = os.path.join(self._data_dir, 'DEF'),
                          profile_dir = os.path.join(self._data_dir, 'profiles'),
                          res_search_dir = self.tmp_dir
                          )
        self.assertEqual( self.cfg.db_type, 'gembase')
        self.tearDown()
        kwargs = {'cfg_file' : "nimportnaoik",
                  'sequence_db' : os.path.join(self._data_dir, "base", "test_base.fa"),
                  'db_type' : 'foo',
                  'def_dir' : os.path.join(self._data_dir, 'DEF'),
                  'profile_dir' : os.path.join(self._data_dir, 'profiles'),
                  'res_search_dir' : self.tmp_dir
        }
        self.assertRaises(ValueError, Config, **kwargs)


    def test_previous_run(self):
        kwargs = {'cfg_file' : "nimportnaoik",
                  'sequence_db' : os.path.join(self._data_dir, "base", "test_base.fa"),
                  'db_type' : 'gembase',
                  'def_dir' : os.path.join(self._data_dir, 'DEF'),
                  'profile_dir' : os.path.join(self._data_dir, 'profiles'),
                  'previous_run' : 'foo',
                  'res_search_dir' : self.tmp_dir
        }
        self.assertRaises(ValueError, Config, **kwargs)
        try:
            cfg_base = Config(cfg_file = "nimportnaoik",
                              sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                              db_type = 'gembase',
                              def_dir = os.path.join(self._data_dir, 'DEF'),
                              profile_dir = os.path.join(self._data_dir, 'profiles'),
                              res_search_dir = self.tmp_dir
                              )
            self.assertIsNone(cfg_base.previous_run)
            cfg_base.save( cfg_base.working_dir )
            #wait
            time.sleep(1)
            new_cfg = Config(previous_run = cfg_base.working_dir)
            self.assertEqual(new_cfg.previous_run, cfg_base.working_dir)
             
        finally:
             
            # close loggers filehandles, so they don't block file deletion
            # in shutil.rmtree calls in Windows
            logging.shutdown()
            try:
                shutil.rmtree(new_cfg.working_dir)
            except:
                pass
         
        
        
    def test_profile_dir(self):
        kwargs = {'cfg_file' : "nimportnaoik",
                  'sequence_db' : os.path.join(self._data_dir, "base", "test_base.fa"),
                  'db_type' : 'gembase',
                  'def_dir' : os.path.join(self._data_dir, 'DEF'),
                  'profile_dir' : 'foo',
                  'res_search_dir' : self.tmp_dir
        }
        self.assertRaises(ValueError, Config, **kwargs)
        profile_dir = os.path.join(os.path.dirname(__file__), '..', 'data', 'profiles')
        self.cfg = Config(cfg_file = "nimportnaoik",
                          sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                          db_type = 'gembase',
                          def_dir = os.path.join(self._data_dir, 'DEF'),
                          profile_dir = profile_dir,
                          res_search_dir = self.tmp_dir
                          )
        self.assertEqual(self.cfg.profile_dir, profile_dir)
  
 
    def test_profile_suffix(self):
        self.cfg = Config(cfg_file = "nimportnaoik",
                          sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                          db_type = 'gembase',
                          def_dir = os.path.join(self._data_dir, 'DEF'),
                          profile_dir = os.path.join(self._data_dir, 'profiles'),
                          res_search_dir = self.tmp_dir
                          )
        self.assertEqual(self.cfg.profile_suffix, '.hmm')
        self.tearDown()
        profile_suffix = 'foo'
        self.cfg = Config(cfg_file = "nimportnaoik",
                          sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                          db_type = 'gembase',
                          def_dir = os.path.join(self._data_dir, 'DEF'),
                          profile_dir = os.path.join(self._data_dir, 'profiles'),
                          profile_suffix = profile_suffix,
                          res_search_dir = self.tmp_dir
                          )
        self.assertEqual(self.cfg.profile_suffix, profile_suffix)
  
 
    def test_replicon_topology(self):
        self.cfg = Config(cfg_file = "nimportnaoik",
                          sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                          db_type = 'gembase',
                          def_dir = os.path.join(self._data_dir, 'DEF'),
                          profile_dir = os.path.join(self._data_dir, 'profiles'),
                          res_search_dir = self.tmp_dir
                          )
        self.assertEqual(self.cfg.replicon_topology, 'circular')
        self.tearDown()
        self.cfg = Config(cfg_file = "nimportnaoik",
                          sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                          db_type = 'gembase',
                          def_dir = os.path.join(self._data_dir, 'DEF'),
                          profile_dir = os.path.join(self._data_dir, 'profiles'),
                          replicon_topology = 'linear',
                          res_search_dir = self.tmp_dir
                          )
        self.assertEqual(self.cfg.replicon_topology, 'linear')
        self.tearDown()
        kwargs = {'cfg_file' : "nimportnaoik",
                  'sequence_db' : os.path.join(self._data_dir, "base", "test_base.fa"),
                  'db_type' : 'gembase',
                  'def_dir' : os.path.join(self._data_dir, 'DEF'),
                  'profile_dir' : os.path.join(self._data_dir, 'profiles'),
                  'replicon_topology' : 'foo',
                  'res_search_dir' : self.tmp_dir
        }
        self.assertRaises(ValueError, Config, **kwargs)


    def test_inter_gene_max_space(self):
        inter_gene_max_space = (["T2SS", 32], ['Flagellum', 64])
        self.cfg = Config(cfg_file = "nimportnaoik",
                          sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                          db_type = 'gembase',
                          def_dir = os.path.join(self._data_dir, 'DEF'),
                          profile_dir = os.path.join(self._data_dir, 'profiles'),
                          inter_gene_max_space = inter_gene_max_space,
                          res_search_dir = self.tmp_dir
                          )
        self.assertEqual(self.cfg.inter_gene_max_space('T2SS'), 32)
        self.assertEqual(self.cfg.inter_gene_max_space('Flagellum'), 64)
        self.assertIsNone(self.cfg.inter_gene_max_space('Foo'))


    def test_min_genes_required(self):
        min_genes_required = (["T2SS", 32], ['Flagellum', 64])
        self.cfg = Config(cfg_file = "nimportnaoik",
                          sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                          db_type = 'gembase',
                          def_dir = os.path.join(self._data_dir, 'DEF'),
                          profile_dir = os.path.join(self._data_dir, 'profiles'),
                          min_genes_required = min_genes_required,
                          res_search_dir = self.tmp_dir
                          )
        self.assertEqual(self.cfg.min_genes_required('T2SS'), 32)
        self.assertEqual(self.cfg.min_genes_required('Flagellum'), 64)
        self.assertIsNone(self.cfg.min_genes_required('Foo'))

    def test_max_nb_genes(self):
        max_nb_genes = (["T2SS", 32], ['Flagellum', 64])
        self.cfg = Config(cfg_file = "nimportnaoik",
                          sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                          db_type = 'gembase',
                          def_dir = os.path.join(self._data_dir, 'DEF'),
                          profile_dir = os.path.join(self._data_dir, 'profiles'),
                          max_nb_genes = max_nb_genes,
                          res_search_dir = self.tmp_dir
                          )
        self.assertEqual(self.cfg.max_nb_genes('T2SS'), 32)
        self.assertEqual(self.cfg.max_nb_genes('Flagellum'), 64)
        self.assertIsNone(self.cfg.max_nb_genes('Foo'))


    def test_min_mandatory_genes_required(self):
        min_mandatory_genes_required = (["T2SS", 32], ['Flagellum', 64])
        self.cfg = Config(cfg_file = "nimportnaoik",
                          sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                          db_type = 'gembase',
                          def_dir = os.path.join(self._data_dir, 'DEF'),
                          profile_dir = os.path.join(self._data_dir, 'profiles'),
                          min_mandatory_genes_required = min_mandatory_genes_required,
                          res_search_dir = self.tmp_dir
                          )
        self.assertEqual(self.cfg.min_mandatory_genes_required('T2SS'), 32)
        self.assertEqual(self.cfg.min_mandatory_genes_required('Flagellum'), 64)
        self.assertIsNone(self.cfg.min_mandatory_genes_required('Foo'))
           
         
    def test_multi_loci(self):
        multi_loci = "T2SS,Flagellum"
        self.cfg = Config(cfg_file = "nimportnaoik",
                         sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                         db_type = 'gembase',
                         def_dir = os.path.join(self._data_dir, 'DEF'),
                         profile_dir = os.path.join(self._data_dir, 'profiles'),
                         multi_loci = multi_loci,
                         res_search_dir = self.tmp_dir 
                         )
        self.assertTrue(self.cfg.multi_loci('T2SS'))
        self.assertTrue(self.cfg.multi_loci('Flagellum'))
        self.assertFalse(self.cfg.multi_loci('Foo'))
          
 
    def test_res_extract_suffix(self):
        self.cfg = Config(cfg_file = "nimportnaoik",
                          sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                          db_type = 'gembase',
                          def_dir = os.path.join(self._data_dir, 'DEF'),
                          profile_dir = os.path.join(self._data_dir, 'profiles'),
                          res_search_dir = self.tmp_dir 
                          )
        self.assertEqual(self.cfg.res_extract_suffix, '.res_hmm_extract')
        self.tearDown()
        res_extract_suffix = 'foo'
        self.cfg = Config(cfg_file = "nimportnaoik",
                          sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                          db_type = 'gembase',
                          def_dir = os.path.join(self._data_dir, 'DEF'),
                          profile_dir = os.path.join(self._data_dir, 'profiles'),
                          res_extract_suffix = res_extract_suffix,
                          res_search_dir = self.tmp_dir 
                          )
        self.assertEqual(self.cfg.res_extract_suffix, res_extract_suffix)
            
           
    def test_res_search_dir(self):
        kwargs = {'cfg_file' : "nimportnaoik",
                  'sequence_db' : os.path.join(self._data_dir, "base", "test_base.fa"),
                  'db_type' : 'gembase',
                  'def_dir' : os.path.join(self._data_dir, 'DEF'),
                  'profile_dir' : os.path.join(self._data_dir, 'profiles'),
                  'res_search_dir' : 'foo',
                  'log_file' : 'NUL' if platform.system() == 'Windows' else '/dev/null'
        }
        self.assertRaises(ValueError, Config, **kwargs)
        self.tearDown()
        res_search_dir = os.path.join(os.path.dirname(__file__), 'datatest')
        self.cfg = Config(cfg_file = "nimportnaoik",
                          sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                          db_type = 'gembase',
                          def_dir = os.path.join(self._data_dir, 'DEF'),
                          profile_dir = os.path.join(self._data_dir, 'profiles'),
                          res_search_dir = res_search_dir,
                          log_file = 'NUL' if platform.system() == 'Windows' else '/dev/null'
                          )
        self.assertEqual(self.cfg.res_search_dir, res_search_dir)
    
  
    def test_res_search_suffix(self):
        self.cfg = Config(cfg_file = "nimportnaoik",
                          sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                          db_type = 'gembase',
                          def_dir = os.path.join(os.path.dirname(__file__),'..', 'data',  'DEF'),
                          profile_dir = os.path.join(self._data_dir, 'profiles'),
                          res_search_dir = self.tmp_dir
                          )
        self.assertEqual(self.cfg.res_search_suffix, '.search_hmm.out')
        self.tearDown()
        res_search_suffix = 'foo'
        self.cfg = Config(cfg_file = "nimportnaoik",
                          sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                          db_type = 'gembase',
                          def_dir = os.path.join(self._data_dir, 'DEF'),
                          profile_dir = os.path.join(self._data_dir, 'profiles'),
                          res_search_suffix = res_search_suffix,
                          res_search_dir = self.tmp_dir
                          )
        self.assertEqual(self.cfg.res_search_suffix, res_search_suffix)
       
       
    def test_sequence_db(self):
        kwargs = {'cfg_file' : "nimportnaoik",
                   'db_type' : 'gembase',
                   'def_dir' : os.path.join(self._data_dir, 'DEF'),
                   'profile_dir' : os.path.join(self._data_dir, 'profiles'),
                   'worker_nb' : '2.3' ,
                   'res_search_dir' : self.tmp_dir,
                   'log_file' : 'NUL' if platform.system() == 'Windows' else '/dev/null'
        }
         
        self.assertRaises(ValueError, Config, **kwargs)  
        kwargs = {'cfg_file' : "nimportnaoik",
                   'sequence_db' : "foo",
                   'db_type' : 'gembase',
                   'def_dir' : os.path.join(self._data_dir, 'DEF'),
                   'profile_dir' : os.path.join(self._data_dir, 'profiles'),
                   'worker_nb' : '2.3',
                   'res_search_dir' : self.tmp_dir,
                   'log_file' : 'NUL' if platform.system() == 'Windows' else '/dev/null'
        }
        self.assertRaises(ValueError, Config, **kwargs) 
        sequence_db = os.path.join(self._data_dir, "base", "test_base.fa")
        self.cfg = Config(cfg_file = "nimportnaoik",
                           sequence_db = sequence_db,
                           db_type = 'gembase',
                           def_dir = os.path.join(self._data_dir, 'DEF'),
                           profile_dir = os.path.join(self._data_dir, 'profiles'),
                           res_search_dir = self.tmp_dir,
                           log_file = 'NUL' if platform.system() == 'Windows' else '/dev/null'
                           )  
        self.assertEqual(self.cfg.sequence_db, sequence_db)
   
 
    def test_worker_nb(self):
        self.cfg = Config(cfg_file = "nimportnaoik",
                          sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                          db_type = 'gembase',
                          def_dir = os.path.join(self._data_dir, 'DEF'),
                          profile_dir = os.path.join(self._data_dir, 'profiles'),
                          res_search_dir = self.tmp_dir
                          )
        self.assertEqual(self.cfg.worker_nb, 1)
        self.tearDown()
        self.cfg = Config(cfg_file = "nimportnaoik",
                          sequence_db = os.path.join(self._data_dir, "base", "test_base.fa"),
                          db_type = 'gembase',
                          def_dir = os.path.join(self._data_dir, 'DEF'),
                          profile_dir = os.path.join(self._data_dir, 'profiles'),
                          res_search_dir = self.tmp_dir,
                          worker_nb = 2
                          )
        self.assertEqual(self.cfg.worker_nb, 2)
        self.tearDown()
        kwargs = {'cfg_file' : "nimportnaoik",
                  'sequence_db' : os.path.join(self._data_dir, "base", "test_base.fa"),
                  'db_type' : 'gembase',
                  'def_dir' : os.path.join(self._data_dir, 'DEF'),
                  'profile_dir' : os.path.join(self._data_dir, 'profiles'),
                  'res_search_dir' : self.tmp_dir,
                  'worker_nb' : '2.3'
        }
        self.assertRaises(ValueError, Config, **kwargs)