/* * Copyright 2014-2016 CyberVision, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * */ package org.kaaproject.kaa.server.transports.http.transport; import org.kaaproject.kaa.common.endpoint.gen.ConfigurationSyncRequest; import org.kaaproject.kaa.common.endpoint.gen.NotificationSyncRequest; import org.kaaproject.kaa.common.endpoint.gen.SubscriptionCommand; import org.kaaproject.kaa.common.endpoint.gen.SubscriptionCommandType; import org.kaaproject.kaa.common.endpoint.gen.SyncRequest; import org.kaaproject.kaa.common.endpoint.gen.SyncRequestMetaData; import org.kaaproject.kaa.common.endpoint.gen.SyncResponse; import org.kaaproject.kaa.common.endpoint.gen.TopicState; import org.kaaproject.kaa.server.transports.http.transport.commands.LongSyncCommand; import java.net.MalformedURLException; import java.nio.ByteBuffer; import java.security.PublicKey; import java.util.LinkedList; import java.util.List; /** * HTTP Test for LongSync request. * * @author Andrey Panasenko <apanasenko@cybervisiontech.com> */ public class HttpTestLongSyncClient extends HttpTestClient<SyncRequest, SyncResponse> { /** * Defined application token */ public static final String SDK_TOKEN = "123test"; /** * Hash size, in test we use fake hashes gust generating them as random bytes */ public static final int HASH_SIZE = 32; /** * Max subscription command size, actual value get random size */ public static final int MAX_SUBSCRIPTION_COMMANDS_SIZE = 100; /** * Defined topic id length */ public static final int TOPIC_ID_LENGTH = 10; /** * profile hash byte array */ private byte[] profileHash; /** * configuration hash byte array */ private byte[] configurationHash; /** * subscription commands list */ private List<SubscriptionCommand> subscriptionCommands; /** * topic state list */ private List<TopicState> topicStates; /** * application seq number, in test it used to pass testId */ private int appStateSeqNumber; /** * Constructor * * @param serverPublicKey - server public key * @param activity - interface to notify request finish. * @throws MalformedURLException - if URI is incorrect * @throws Exception - if request creation failed */ public HttpTestLongSyncClient( PublicKey serverPublicKey, HttpActivity<SyncResponse> activity) throws MalformedURLException, Exception { super(serverPublicKey, LongSyncCommand.getCommandName(), activity); longSyncInit(); postInit(getRequest()); } /** * Create SyncRequest. */ private void longSyncInit() { SyncRequest request = new SyncRequest(); request.setSyncRequestMetaData(new SyncRequestMetaData()); setRequest(request); getRequest().getSyncRequestMetaData().setTimeout(Long.valueOf(rnd.nextInt(10000000))); syncInit(); } /** * Create SyncRequest. */ private void syncInit() { profileHash = getRandomBytes(HASH_SIZE); configurationHash = getRandomBytes(HASH_SIZE); appStateSeqNumber = getId(); SyncRequest request = new SyncRequest(); request.setSyncRequestMetaData(new SyncRequestMetaData()); request.getSyncRequestMetaData().setSdkToken(SDK_TOKEN); request.getSyncRequestMetaData().setEndpointPublicKeyHash(ByteBuffer.wrap(getClientPublicKeyHash().getData())); request.getSyncRequestMetaData().setProfileHash(ByteBuffer.wrap(profileHash)); ConfigurationSyncRequest csRequest = new ConfigurationSyncRequest(); csRequest.setConfigurationHash(ByteBuffer.wrap(configurationHash)); request.setConfigurationSyncRequest(csRequest); generateSubscriptionCommandList(); NotificationSyncRequest nsRequest = new NotificationSyncRequest(); nsRequest.setSubscriptionCommands(subscriptionCommands); nsRequest.setTopicStates(topicStates); nsRequest.setTopicListHash(1); request.setNotificationSyncRequest(nsRequest); setRequest(request); } /** * generate subscription command list */ private void generateSubscriptionCommandList() { subscriptionCommands = new LinkedList<>(); topicStates = new LinkedList<>(); int sc_size = Math.round(rnd.nextFloat() * MAX_SUBSCRIPTION_COMMANDS_SIZE); for (int i = 0; i < sc_size; i++) { SubscriptionCommand sc = null; if (rnd.nextBoolean()) { sc = new SubscriptionCommand(rnd.nextLong(), SubscriptionCommandType.ADD); } else { sc = new SubscriptionCommand(rnd.nextLong(), SubscriptionCommandType.REMOVE); } topicStates.add(new TopicState(sc.getTopicId(), rnd.nextInt())); subscriptionCommands.add(sc); } } /** * @return the profileHash */ public byte[] getProfileHash() { return profileHash; } /** * @return the configurationHash */ public byte[] getConfigurationHash() { return configurationHash; } /** * @return the subscriptionCommands */ public List<SubscriptionCommand> getSubscriptionCommands() { return subscriptionCommands; } /** * @return the topicStates */ public List<TopicState> getTopicStates() { return topicStates; } /** * @return the appStateSeqNumber */ public int getAppStateSeqNumber() { return appStateSeqNumber; } @Override protected Class<SyncRequest> getRequestConverterClass() { return SyncRequest.class; } @Override protected Class<SyncResponse> getResponseConverterClass() { return SyncResponse.class; } }