From 02b63c6f8200042175b482b9cc00a0bc950f2f06 Mon Sep 17 00:00:00 2001 From: "Endi S. Dewata" Date: Tue, 5 Jan 2016 01:39:06 +0100 Subject: Updated CLI to run individual selftests. The pki selftest-run command has been modified to execute the specified selftests, or all selftests if nothing is specified. The command will also display the status of each test and the stack trace if it fails. https://fedorahosted.org/pki/ticket/1502 --- .../certsrv/selftests/ISelfTestSubsystem.java | 7 + .../netscape/certsrv/selftests/SelfTestClient.java | 10 ++ .../certsrv/selftests/SelfTestResource.java | 12 ++ .../netscape/certsrv/selftests/SelfTestResult.java | 150 +++++++++++++++++++++ .../certsrv/selftests/SelfTestResults.java | 38 ++++++ 5 files changed, 217 insertions(+) create mode 100644 base/common/src/com/netscape/certsrv/selftests/SelfTestResult.java create mode 100644 base/common/src/com/netscape/certsrv/selftests/SelfTestResults.java (limited to 'base/common/src') diff --git a/base/common/src/com/netscape/certsrv/selftests/ISelfTestSubsystem.java b/base/common/src/com/netscape/certsrv/selftests/ISelfTestSubsystem.java index 29adde082..c07b96acb 100644 --- a/base/common/src/com/netscape/certsrv/selftests/ISelfTestSubsystem.java +++ b/base/common/src/com/netscape/certsrv/selftests/ISelfTestSubsystem.java @@ -139,6 +139,13 @@ public interface ISelfTestSubsystem public void runSelfTestsOnDemand() throws EMissingSelfTestException, ESelfTestException; + /** + * Execute a self test. + * + * @exception Exception self test exception + */ + public void runSelfTest(String instanceName) throws Exception; + // // methods associated with the list of startup self tests // diff --git a/base/common/src/com/netscape/certsrv/selftests/SelfTestClient.java b/base/common/src/com/netscape/certsrv/selftests/SelfTestClient.java index 108cc1f8f..7dce1db15 100644 --- a/base/common/src/com/netscape/certsrv/selftests/SelfTestClient.java +++ b/base/common/src/com/netscape/certsrv/selftests/SelfTestClient.java @@ -50,6 +50,16 @@ public class SelfTestClient extends Client { client.getEntity(response, Void.class); } + public SelfTestResults runSelfTests() { + Response response = resource.runSelfTests(); + return client.getEntity(response, SelfTestResults.class); + } + + public SelfTestResult runSelfTest(String selfTestID) { + Response response = resource.runSelfTest(selfTestID); + return client.getEntity(response, SelfTestResult.class); + } + public SelfTestData getSelfTest(String selfTestID) { Response response = resource.getSelfTest(selfTestID); return client.getEntity(response, SelfTestData.class); diff --git a/base/common/src/com/netscape/certsrv/selftests/SelfTestResource.java b/base/common/src/com/netscape/certsrv/selftests/SelfTestResource.java index 04f41999d..2238beb11 100644 --- a/base/common/src/com/netscape/certsrv/selftests/SelfTestResource.java +++ b/base/common/src/com/netscape/certsrv/selftests/SelfTestResource.java @@ -50,8 +50,20 @@ public interface SelfTestResource { @ACLMapping("selftests.execute") public Response executeSelfTests(@QueryParam("action") String action); + @POST + @Path("run") + @ClientResponseType(entityType=SelfTestResults.class) + @ACLMapping("selftests.execute") + public Response runSelfTests(); + @GET @Path("{selfTestID}") @ClientResponseType(entityType=SelfTestData.class) public Response getSelfTest(@PathParam("selfTestID") String selfTestID); + + @POST + @Path("{selfTestID}/run") + @ClientResponseType(entityType=SelfTestResult.class) + @ACLMapping("selftests.execute") + public Response runSelfTest(@PathParam("selfTestID") String selfTestID); } diff --git a/base/common/src/com/netscape/certsrv/selftests/SelfTestResult.java b/base/common/src/com/netscape/certsrv/selftests/SelfTestResult.java new file mode 100644 index 000000000..1bb361928 --- /dev/null +++ b/base/common/src/com/netscape/certsrv/selftests/SelfTestResult.java @@ -0,0 +1,150 @@ +// --- BEGIN COPYRIGHT BLOCK --- +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; version 2 of the License. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this program; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +// +// (C) 2016 Red Hat, Inc. +// All rights reserved. +// --- END COPYRIGHT BLOCK --- + +package com.netscape.certsrv.selftests; + +import java.io.StringReader; +import java.io.StringWriter; + +import javax.xml.bind.JAXBContext; +import javax.xml.bind.Marshaller; +import javax.xml.bind.Unmarshaller; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +/** + * @author Endi S. Dewata + */ +@XmlRootElement(name="SelfTestResult") +public class SelfTestResult { + + public static Marshaller marshaller; + public static Unmarshaller unmarshaller; + + static { + try { + marshaller = JAXBContext.newInstance(SelfTestResult.class).createMarshaller(); + marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); + unmarshaller = JAXBContext.newInstance(SelfTestResult.class).createUnmarshaller(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + String id; + String status; + String output; + + @XmlAttribute(name="id") + public String getID() { + return id; + } + + public void setID(String id) { + this.id = id; + } + + @XmlElement(name="Status") + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + @XmlElement(name="Output") + public String getOutput() { + return output; + } + + public void setOutput(String output) { + this.output = output; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((id == null) ? 0 : id.hashCode()); + result = prime * result + ((output == null) ? 0 : output.hashCode()); + result = prime * result + ((status == null) ? 0 : status.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + SelfTestResult other = (SelfTestResult) obj; + if (id == null) { + if (other.id != null) + return false; + } else if (!id.equals(other.id)) + return false; + if (output == null) { + if (other.output != null) + return false; + } else if (!output.equals(other.output)) + return false; + if (status == null) { + if (other.status != null) + return false; + } else if (!status.equals(other.status)) + return false; + return true; + } + + public String toString() { + try { + StringWriter sw = new StringWriter(); + marshaller.marshal(this, sw); + return sw.toString(); + + } catch (Exception e) { + return super.toString(); + } + } + + public static SelfTestResult valueOf(String string) throws Exception { + try { + return (SelfTestResult)unmarshaller.unmarshal(new StringReader(string)); + } catch (Exception e) { + return null; + } + } + + public static void main(String args[]) throws Exception { + + SelfTestResult before = new SelfTestResult(); + before.setID("selftest1"); + before.setStatus("PASSED"); + before.setOutput(null); + + String string = before.toString(); + System.out.println(string); + + SelfTestResult after = SelfTestResult.valueOf(string); + System.out.println(before.equals(after)); + } +} diff --git a/base/common/src/com/netscape/certsrv/selftests/SelfTestResults.java b/base/common/src/com/netscape/certsrv/selftests/SelfTestResults.java new file mode 100644 index 000000000..e4f2d951d --- /dev/null +++ b/base/common/src/com/netscape/certsrv/selftests/SelfTestResults.java @@ -0,0 +1,38 @@ +// --- BEGIN COPYRIGHT BLOCK --- +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; version 2 of the License. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this program; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +// +// (C) 2016 Red Hat, Inc. +// All rights reserved. +// --- END COPYRIGHT BLOCK --- + +package com.netscape.certsrv.selftests; + +import java.util.Collection; + +import javax.xml.bind.annotation.XmlElementRef; +import javax.xml.bind.annotation.XmlRootElement; + +import com.netscape.certsrv.base.DataCollection; + +/** + * @author Endi S. Dewata + */ +@XmlRootElement(name="SelfTestResults") +public class SelfTestResults extends DataCollection { + + @XmlElementRef + public Collection getEntries() { + return super.getEntries(); + } +} -- cgit