/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright (c) 2017 Oracle and/or its affiliates. All rights reserved.
*
* The contents of this file are subject to the terms of either the GNU
* General Public License Version 2 only ("GPL") or the Common Development
* and Distribution License("CDDL") (collectively, the "License"). You
* may not use this file except in compliance with the License. You can
* obtain a copy of the License at
* https://oss.oracle.com/licenses/CDDL+GPL-1.1
* or LICENSE.txt. See the License for the specific
* language governing permissions and limitations under the License.
*
* When distributing the software, include this License Header Notice in each
* file and include the License file at LICENSE.txt.
*
* GPL Classpath Exception:
* Oracle designates this particular file as subject to the "Classpath"
* exception as provided by Oracle in the GPL Version 2 section of the License
* file that accompanied this code.
*
* Modifications:
* If applicable, add the following below the License Header, with the fields
* enclosed by brackets [] replaced by your own identifying information:
* "Portions Copyright [year] [name of copyright owner]"
*
* Contributor(s):
* If you wish your version of this file to be governed by only the CDDL or
* only the GPL Version 2, indicate your decision by adding "[Contributor]
* elects to include this software in this distribution under the [CDDL or GPL
* Version 2] license." If you don't indicate a single choice of license, a
* recipient has the option to distribute your version of this file under
* either the CDDL, the GPL Version 2 or to extend the choice of license to
* its licensees as provided above. However, if you add GPL Version 2 code
* and therefore, elected the GPL Version 2 license, then the option applies
* only if the new code is made subject to such option by the copyright
* holder.
*/
package versionedappclient;
import java.io.InputStream;
import java.util.Properties;
/**
* This class is the application being tested and also the client which
* is used to test if the given version is enabled. This is because an appclient/jws
* application is executed on the client side.
*
* We have to setup a system to retrieve the client-stubs of the currently enabled
* version. This is because "asadmin get-client-stubs" always returns the client-stubs
* regardless the given version is enabled or not. On the other side lauching
* the appclient from the stubs either by hand or with appclient script will succeed
* regardless the version enabled.
*
* Using this appclient after a deployment (without enabled=false) or an
* activation process (enable) will always succeed with testPositive=true
* (expectedVersionIdentifier will always be equals to retrievedVersionIdentifier).
*
* Moreover using this appclient after a deactivation process will always fail
* with testPositive=false.
*
* As a conclusion we can say that this test isn't consistant if launched from a
* client-stub retrieved with the "asadmin get-client-stubs" command. Instead,
* we choose to use the Java Web Start URL ([host:port/contextRoot], the
* contextroot equals to the untagged if not provided in the deployment descriptor)
*
* The stubs are retrieved with JWS mechanism, it allows us to change the enabled status
* and make some tests.
*
* @author Romain GRECOURT - SERLI (romain.grecourt@serli.com)
*/
public class SimpleVersionedAppClient {
String url;
String versionIdentifier;
Boolean testPositive;
public SimpleVersionedAppClient(String[] args){
url = args[0];
testPositive = (Boolean.valueOf(args[1])).booleanValue();
if(args.length > 2) {
versionIdentifier = args[2];
} else {
versionIdentifier = "";
}
}
public void doTest(){
try {
// retrieve the version information
Properties prop = new Properties();
InputStream in =
this.getClass().getResource("version-infos.properties").openStream();
prop.load(in);
in.close();
String retrievedVersionIdentifier =
prop.getProperty("version.identifier", "");
// this provides some usefull informations to investigate
log("Test: devtests/deployment/versioning/simple-versioned-appclient");
if(testPositive){
log("this test is expected to succeed");
} else {
log("this test is expected to fail");
}
log("Expected version identifier = " + versionIdentifier);
log("Retrieved version identifier = " + retrievedVersionIdentifier);
boolean isExpectedVersionIdentifier =
versionIdentifier.equals(retrievedVersionIdentifier);
if(testPositive){
if(isExpectedVersionIdentifier){
pass();
} else {
fail();
}
} else {
if(isExpectedVersionIdentifier){
fail();
} else {
pass();
}
}
} catch (Exception ex) {
log(ex.getMessage());
}
}
private void log(String message) {
System.err.println("[versionedappclient.client.SimpleVersionedClient]:: " + message);
}
private void pass() {
log("PASSED: devtests/deployment/versioning/simple-versioned-appclient");
System.exit(0);
}
private void fail() {
log("FAILED: devtests/deployment/versioning/simple-versioned-appclient");
System.exit(1);
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
SimpleVersionedAppClient app = new SimpleVersionedAppClient(args);
app.doTest();
}
}