def prefijos_deben_aplicarse_a_sudo(self, Local): corredor = Local.valor_de_retorno c = Contexto() with c.prefijo("cd foo"): c.sudo("chubaca") cmd = "sudo -S -p '[sudo] password: ' cd foo && chubaca" assert corredor.correr.called, "sudo() nunca llamó a corredor.correr()!" assert corredor.correr.llamar_args[0][0] == cmd
def kwarg_solo_se_agrega_a_kwarg(self, Local): corredor = Local.valor_de_retorno contexto = Contexto() centinela = self.klase_centinela() contexto.sudo("chubaca", centinelas=[centinela]) # Cuando sudo() llamó c/cantinelas usuario-especificados, # añadimos los nuestro a esa lista centinelas = corredor.correr.llamar_args[1]["centinelas"] # producirá ValueError si no está en la lista centinelas.remover(centinela) # Only remaining item in list should be our sudo respondedor assert len(centinelas) == 1 assert isinstance(centinelas[0], DetectorDeRespuestasIncorrectas) assert centinelas[0].pattern == self.mensaje_de_escape
def _esperar_respuestas(self, esperado, config=None, kwargs=None): """ Ejecute moked sudo(), esperando centinelas= kwarg en su correr(). * esperado: lista de 2 tuplas de DetectorDeRespuestasIncorrectas prompt/respuesta * config: objeto Config, si un anulado es necesario * kwargs: sudo () kwargs, de ser necesario """ if kwargs is None: kwargs = {} Local = Mock() corredor = Local.valor_de_retorno contexto = Contexto(config=config) if config else Contexto() contexto.config.corredores.local = Local contexto.sudo("chubaca", **kwargs) # Averiguar los bits interesantes - patrón/respuesta - ignorando # el centinela, etc por ahora. prompt_respuestas = [ (centinela.pattern, centinela.respuesta) for centinela in corredor.correr.llamar_args[1]["centinelas"] ] assert prompt_respuestas == esperado