Desenvolvemos um conjunto de comunicação de sub / pub / rede. Ele está em uso em vários aplicativos e domínios diferentes, principalmente em nossas cargas a bordo da Estação Espacial Internacional (ISS). O Ubuntu é o nosso principal sistema de desenvolvimento e implementação. Todo o nosso código está bem empacotado. No processo de criação dos pacotes, gostaria de executar os conjuntos de testes incluídos em cada base de código. No entanto ...
Nosso protocolo de comunicação usa o Avahi, que por sua vez usa o DBus. Assim, nossos testes usam o DBus. Ao criar um pacote, "fakeroot" é invocado para resolver vários problemas. No entanto, introduz um problema que não consegui resolver. Quando nossos testes são executados sem fakeroot, vemos algo assim:
[pid 3286] sendto(12, "AUTH EXTERNAL 31303030\r\n", 24, MSG_NOSIGNAL, NULL, 0) = 24
[pid 3286] read(12, "OK 38b4600ae82865f9eba81cb700000"..., 2048) = 37
Quando o mesmo teste é executado usando o fakeroot, vemos algo assim:
[pid 3280] sendto(12, "AUTH EXTERNAL 30\r\n", 18, MSG_NOSIGNAL, NULL, 0) = 18
[pid 3280] read(12, "REJECTED EXTERNAL DBUS_COOKIE_SH"..., 2048) = 46
Acontece que a autenticação DBus está simplesmente usando o código ASCII da representação de string do UID para o usuário. Quando executado normalmente, o UID é 1000, '1' é 31, '0' é 30; portanto, o token de autenticação para o UID 1000 é 31303030. Em fakeroot, o programa acha que seu UID é 0 e envia o token 30. Isso é rejeitado e toda a confusão falha.
Isso está se conectando ao sistema DBus e não a uma sessão DBus, então não posso simplesmente iniciar uma nova instância dentro do fakeroot. Eu passei por nosso código, o código Avahi e o código DBus, e não vejo nenhuma maneira de contornar isso.
Então, finalmente, a pergunta - Existe uma maneira de executar testes durante a criação de pacotes sem o wrapper fakeroot? Eu realmente quero que os testes sejam executados, já que o código é submetido a um sistema buildbot que possui uma ampla variedade de distribuições e versões do Linux. Isso oferece uma cobertura de teste muito melhor do que apenas executar os testes no meu sistema de desenvolvimento.