2016-06-13 8 views
3

Meine Anforderung ist, dass ich ein Dienstprogramm ausführen muss, das in anderen Benutzer installiert ist, und ich muss die von dieser Sitzung zurückgegebene Ausgabe überprüfen und überprüfen. Beispiel:Wie verwende ich Serverspec, um das in anderen Benutzern installierte Dienstprogramm zu testen?

  • Ich installierte Java als srijava Benutzer
  • Jetzt in Serverspec ich den Befehl schrieb die Java-Version zu testen (Angenommen, die java -version läuft nur in diesem Benutzer und nicht als root).
  • Wenn ich su srijava verwende, dann bekomme ich nicht die Ausgabe zurück in die Root-Sitzung zurückgegeben und der Test schlägt fehl.
  • Wenn ich ohne su srijava laufen dann mein Dienstprogramm wird einen Fehler werfen , dass der Benutzer nicht SriJava ist

Code mit su:

describe command('su srijava ; cd /app/java; ./java --version') do 
    its(:stdout) { should contain('1.7') } 
end 

-Code ohne su:

describe command('cd /app/java; ./java --version') do 
    its(:stdout) { should contain('1.7') } 
end 

Antwort

1
describe command("su -c '/app/java/java --version' srijava") do 
    its(:stdout) { should contain('1.7') } 
end 

FYI Sie verwenden RSpec 2 und bald veraltet Serverspec Syntax für Ihre Matcher. Betrachten Sie es mit:

+0

Wenn kein Empfänger AFAIK nicht veraltet ist, ist es das 'object.should' das geschlagen wurde. – coderanger

+0

@coderanger Ich habe nichts über etwas veraltet gesagt. Worauf beziehen Sie sich? –

+0

Sie sagten "Rspec 2" und "obsolete", ich denke, weil Sie die beiden Formen der Verwendung von 'sollten' verwechselt. Der Receiverless ist immer noch in Rspec 3 vorhanden und nicht veraltet (und wird in allen Serverspec-Beispielen verwendet). Daher solltest du diesen Teil der Antwort entfernen, da er falsch ist :) – coderanger