/*
 * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
 * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 * 
 * $Id: WSCClient.java 75018 2017-06-01 21:59:20Z jsupol $
 */

package com.sun.ts.tests.websocket.negdep.onmessage.srv.binarybytebufferint;

import java.nio.ByteBuffer;

import com.sun.ts.tests.websocket.negdep.NegativeDeploymentClient;

/*
 * @class.setup_props: webServerHost;
 *                     webServerPort;
 *                     ts_home;
 *                     ws_wait;
 *                     tslib.name;
 */
/**
 * @OnMessage can contain ByteBuffer and boolean pair. This test checks that
 *            ByteBuffer and int pair is out of this scope for partial messages.
 * @since 1.11
 */
public class WSCClient extends NegativeDeploymentClient {

	private static final long serialVersionUID = 111L;

	public WSCClient() {
		setContextRoot("wsc_negdep_onmessage_srv_binarybytebufferint_web");
	}

	public static void main(String[] args) {
		new WSCClient().run(args);
	}

	/*
	 * @testName: byteBufferIntOnMessageUndeployOtherEndpointTest
	 * @assertion_ids:  WebSocket:SPEC:WSC-5.2.1-3;WebSocket:SPEC:WSC-4.7-1;
	 * @test_Strategy: In both cases, a deployment error raised during the 
	 * deployment process must halt the deployment of the application, any 
	 * well formed endpoints deployed prior to the error being raised must be 
	 * removed from service and no more websocket endpoints from that 
	 * application may be deployed by the container, even if they are valid.
	 * 
	 * Any method annotated with @OnMessage that does not conform to the forms 
	 * defied therein is invalid. The websocket implementation must not deploy 
	 * such an endpoint and must raise a deployment error if an attempt is made 
	 * to deploy such an annotated endpoint. [WSC-4.7-1]
	 * 
	 * To check the test fails when deployment pass, comment out the int 
	 * parameter in @OnMessage of OnMessageServerEndpoint  
	 */
	public void byteBufferIntOnMessageUndeployOtherEndpointTest()
			throws Fault {
		setEntity(ByteBuffer.wrap("anything".getBytes()));
		setProperty(Property.REQUEST, buildRequest("echo"));
		setProperty(Property.STATUS_CODE, "-1");
		// logExceptionOnInvocation(false);
		try {
			invoke(false);
		} catch (Fault tfe) {
			// DeploymentException
		}
		String response = getResponseAsString();
		if ("anything".equals(response))
			throwValidEndpointMustBeRemoved();
	}

	/*
	 * @testName: byteBufferIntOnMessageTest
	 * @assertion_ids:  WebSocket:SPEC:WSC-5.2.1-3;WebSocket:SPEC:WSC-4.7-1;
	 * @test_Strategy: In both cases, a deployment error raised during the 
	 * deployment process must halt the deployment of the application, any 
	 * well formed endpoints deployed prior to the error being raised must be 
	 * removed from service and no more websocket endpoints from that 
	 * application may be deployed by the container, even if they are valid.
	 * 
	 * Any method annotated with @OnMessage that does not conform to the forms 
	 * defied therein is invalid. The websocket implementation must not deploy 
	 * such an endpoint and must raise a deployment error if an attempt is made 
	 * to deploy such an annotated endpoint. [WSC-4.7-1]
	 * 
	 * To check the test fails when deployment pass, comment out the int 
	 * parameter in @OnMessage of OnMessageServerEndpoint  
	 */
	public void byteBufferIntOnMessageTest() throws Fault {
		setEntity(ByteBuffer.wrap("anything".getBytes()));
		setProperty(Property.REQUEST, buildRequest("invalid"));
		setProperty(Property.STATUS_CODE, "-1");
		// logExceptionOnInvocation(false);
		try {
			invoke(false);
		} catch (Fault tfe) {
			// DeploymentException
		}
		String response = getResponseAsString();
		if (response != null && response.contains("anything"))
			throwValidEndpointMustBeRemoved();
	}
}
