/* * 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.client.channel; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import org.junit.Test; import org.kaaproject.kaa.client.channel.impl.DefaultOperationDataProcessor; import org.kaaproject.kaa.client.persistence.KaaClientState; import org.kaaproject.kaa.common.TransportType; import org.kaaproject.kaa.common.avro.AvroByteArrayConverter; import org.kaaproject.kaa.common.endpoint.gen.ConfigurationSyncResponse; import org.kaaproject.kaa.common.endpoint.gen.EventSyncResponse; import org.kaaproject.kaa.common.endpoint.gen.LogDeliveryStatus; import org.kaaproject.kaa.common.endpoint.gen.LogSyncResponse; import org.kaaproject.kaa.common.endpoint.gen.NotificationSyncResponse; import org.kaaproject.kaa.common.endpoint.gen.ProfileSyncResponse; import org.kaaproject.kaa.common.endpoint.gen.RedirectSyncResponse; import org.kaaproject.kaa.common.endpoint.gen.SyncResponse; import org.kaaproject.kaa.common.endpoint.gen.SyncResponseResultType; import org.kaaproject.kaa.common.endpoint.gen.SyncResponseStatus; import org.kaaproject.kaa.common.endpoint.gen.UserSyncResponse; import org.mockito.Mockito; import java.util.Collections; import java.util.HashMap; import java.util.Map; public class DefaultOperationDataProcessorTest { private static final int REQUEST_ID = 42; @Test public void testUpRequestCreationWithNullTypes() throws Exception { KaaClientState state = Mockito.mock(KaaClientState.class); DefaultOperationDataProcessor operationsDataProcessor = new DefaultOperationDataProcessor(state); assertNull(operationsDataProcessor.compileRequest(null)); } @Test public void testUpRequestCreationWithUnknownType() throws Exception { KaaClientState state = Mockito.mock(KaaClientState.class); DefaultOperationDataProcessor operationsDataProcessor = new DefaultOperationDataProcessor(state); Map<TransportType, ChannelDirection> types = new HashMap<>(); types.put(TransportType.BOOTSTRAP, ChannelDirection.BIDIRECTIONAL); assertNull(operationsDataProcessor.compileRequest(types)); } @Test public void testUpRequestCreationWithNullTransports() throws Exception { KaaClientState state = Mockito.mock(KaaClientState.class); DefaultOperationDataProcessor operationsDataProcessor = new DefaultOperationDataProcessor(state); Map<TransportType, ChannelDirection> transportTypes = new HashMap<TransportType, ChannelDirection>(); transportTypes.put(TransportType.PROFILE, ChannelDirection.BIDIRECTIONAL); transportTypes.put(TransportType.CONFIGURATION, ChannelDirection.BIDIRECTIONAL); transportTypes.put(TransportType.NOTIFICATION, ChannelDirection.BIDIRECTIONAL); transportTypes.put(TransportType.USER, ChannelDirection.BIDIRECTIONAL); transportTypes.put(TransportType.EVENT, ChannelDirection.BIDIRECTIONAL); transportTypes.put(TransportType.LOGGING, ChannelDirection.BIDIRECTIONAL); assertNotNull(operationsDataProcessor.compileRequest(transportTypes)); } @Test public void testUpRequestCreation() throws Exception { KaaClientState state = Mockito.mock(KaaClientState.class); DefaultOperationDataProcessor operationsDataProcessor = new DefaultOperationDataProcessor(state); ProfileTransport profileTransport = Mockito.mock(ProfileTransport.class); EventTransport eventTransport = Mockito.mock(EventTransport.class); NotificationTransport notificationTransport = Mockito.mock(NotificationTransport.class); ConfigurationTransport configurationTransport = Mockito.mock(ConfigurationTransport.class); UserTransport userTransport = Mockito.mock(UserTransport.class); MetaDataTransport metaDataTransport = Mockito.mock(MetaDataTransport.class); LogTransport logTransport = Mockito.mock(LogTransport.class); operationsDataProcessor.setConfigurationTransport(configurationTransport); operationsDataProcessor.setEventTransport(eventTransport); operationsDataProcessor.setMetaDataTransport(metaDataTransport); operationsDataProcessor.setNotificationTransport(notificationTransport); operationsDataProcessor.setProfileTransport(profileTransport); operationsDataProcessor.setUserTransport(userTransport); operationsDataProcessor.setLogTransport(logTransport); Map<TransportType, ChannelDirection> transportTypes = new HashMap<TransportType, ChannelDirection>(); transportTypes.put(TransportType.PROFILE, ChannelDirection.BIDIRECTIONAL); transportTypes.put(TransportType.CONFIGURATION, ChannelDirection.BIDIRECTIONAL); transportTypes.put(TransportType.NOTIFICATION, ChannelDirection.BIDIRECTIONAL); transportTypes.put(TransportType.USER, ChannelDirection.BIDIRECTIONAL); transportTypes.put(TransportType.EVENT, ChannelDirection.BIDIRECTIONAL); transportTypes.put(TransportType.LOGGING, ChannelDirection.BIDIRECTIONAL); assertNotNull(operationsDataProcessor.compileRequest(transportTypes)); Mockito.verify(profileTransport, Mockito.times(1)).createProfileRequest(); Mockito.verify(eventTransport, Mockito.times(1)).createEventRequest(Mockito.anyInt()); Mockito.verify(notificationTransport, Mockito.times(1)).createNotificationRequest(); Mockito.verify(configurationTransport, Mockito.times(1)).createConfigurationRequest(); Mockito.verify(userTransport, Mockito.times(1)).createUserRequest(); Mockito.verify(metaDataTransport, Mockito.times(1)).createMetaDataRequest(); Mockito.verify(logTransport, Mockito.times(1)).createLogRequest(); } @Test public void testDownRequestCreation() throws Exception { KaaClientState state = Mockito.mock(KaaClientState.class); DefaultOperationDataProcessor operationsDataProcessor = new DefaultOperationDataProcessor(state); ProfileTransport profileTransport = Mockito.mock(ProfileTransport.class); EventTransport eventTransport = Mockito.mock(EventTransport.class); NotificationTransport notificationTransport = Mockito.mock(NotificationTransport.class); ConfigurationTransport configurationTransport = Mockito.mock(ConfigurationTransport.class); UserTransport userTransport = Mockito.mock(UserTransport.class); MetaDataTransport metaDataTransport = Mockito.mock(MetaDataTransport.class); LogTransport logTransport = Mockito.mock(LogTransport.class); operationsDataProcessor.setConfigurationTransport(configurationTransport); operationsDataProcessor.setEventTransport(eventTransport); operationsDataProcessor.setMetaDataTransport(metaDataTransport); operationsDataProcessor.setNotificationTransport(notificationTransport); operationsDataProcessor.setProfileTransport(profileTransport); operationsDataProcessor.setUserTransport(userTransport); operationsDataProcessor.setLogTransport(logTransport); Map<TransportType, ChannelDirection> transportTypes = new HashMap<TransportType, ChannelDirection>(); transportTypes.put(TransportType.PROFILE, ChannelDirection.DOWN); transportTypes.put(TransportType.CONFIGURATION, ChannelDirection.DOWN); transportTypes.put(TransportType.NOTIFICATION, ChannelDirection.DOWN); transportTypes.put(TransportType.USER, ChannelDirection.DOWN); transportTypes.put(TransportType.EVENT, ChannelDirection.DOWN); transportTypes.put(TransportType.LOGGING, ChannelDirection.DOWN); assertNotNull(operationsDataProcessor.compileRequest(transportTypes)); Mockito.verify(profileTransport, Mockito.times(0)).createProfileRequest(); Mockito.verify(eventTransport, Mockito.times(0)).createEventRequest(Mockito.anyInt()); Mockito.verify(notificationTransport, Mockito.times(0)).createNotificationRequest(); Mockito.verify(configurationTransport, Mockito.times(1)).createConfigurationRequest(); Mockito.verify(userTransport, Mockito.times(0)).createUserRequest(); Mockito.verify(logTransport, Mockito.times(0)).createLogRequest(); Mockito.verify(metaDataTransport, Mockito.times(1)).createMetaDataRequest(); } @Test public void testResponse() throws Exception { KaaClientState state = Mockito.mock(KaaClientState.class); DefaultOperationDataProcessor operationsDataProcessor = new DefaultOperationDataProcessor(state); ProfileTransport profileTransport = Mockito.mock(ProfileTransport.class); EventTransport eventTransport = Mockito.mock(EventTransport.class); NotificationTransport notificationTransport = Mockito.mock(NotificationTransport.class); ConfigurationTransport configurationTransport = Mockito.mock(ConfigurationTransport.class); UserTransport userTransport = Mockito.mock(UserTransport.class); RedirectionTransport redirectionTransport = Mockito.mock(RedirectionTransport.class); LogTransport logTransport = Mockito.mock(LogTransport.class); operationsDataProcessor.setConfigurationTransport(configurationTransport); operationsDataProcessor.setEventTransport(eventTransport); operationsDataProcessor.setNotificationTransport(notificationTransport); operationsDataProcessor.setProfileTransport(profileTransport); operationsDataProcessor.setRedirectionTransport(redirectionTransport); operationsDataProcessor.setUserTransport(userTransport); operationsDataProcessor.setLogTransport(logTransport); SyncResponse response = new SyncResponse(); response.setStatus(SyncResponseResultType.SUCCESS); response.setConfigurationSyncResponse(new ConfigurationSyncResponse(SyncResponseStatus.DELTA, null, null)); response.setEventSyncResponse(new EventSyncResponse()); response.setNotificationSyncResponse(new NotificationSyncResponse(SyncResponseStatus.DELTA, null, null)); response.setProfileSyncResponse(new ProfileSyncResponse(SyncResponseStatus.DELTA)); response.setRedirectSyncResponse(new RedirectSyncResponse(1)); response.setUserSyncResponse(new UserSyncResponse()); LogDeliveryStatus status = new LogDeliveryStatus(REQUEST_ID, SyncResponseResultType.SUCCESS, null); response.setLogSyncResponse(new LogSyncResponse(Collections.singletonList(status))); AvroByteArrayConverter<SyncResponse> converter = new AvroByteArrayConverter<>(SyncResponse.class); operationsDataProcessor.processResponse(converter.toByteArray(response)); Mockito.verify(profileTransport, Mockito.times(1)).onProfileResponse(Mockito.any(ProfileSyncResponse.class)); Mockito.verify(eventTransport, Mockito.times(1)).onEventResponse(Mockito.any(EventSyncResponse.class)); Mockito.verify(notificationTransport, Mockito.times(1)).onNotificationResponse(Mockito.any(NotificationSyncResponse.class)); Mockito.verify(configurationTransport, Mockito.times(1)).onConfigurationResponse(Mockito.any(ConfigurationSyncResponse.class)); Mockito.verify(userTransport, Mockito.times(1)).onUserResponse(Mockito.any(UserSyncResponse.class)); Mockito.verify(redirectionTransport, Mockito.times(1)).onRedirectionResponse(Mockito.any(RedirectSyncResponse.class)); Mockito.verify(logTransport, Mockito.times(1)).onLogResponse(Mockito.any(LogSyncResponse.class)); } @Test public void testResponseWithNullTransports() throws Exception { KaaClientState state = Mockito.mock(KaaClientState.class); DefaultOperationDataProcessor operationsDataProcessor = new DefaultOperationDataProcessor(state); SyncResponse response = new SyncResponse(); response.setStatus(SyncResponseResultType.SUCCESS); response.setConfigurationSyncResponse(new ConfigurationSyncResponse(SyncResponseStatus.DELTA, null, null)); response.setEventSyncResponse(new EventSyncResponse()); response.setNotificationSyncResponse(new NotificationSyncResponse(SyncResponseStatus.DELTA, null, null)); response.setProfileSyncResponse(new ProfileSyncResponse(SyncResponseStatus.DELTA)); response.setRedirectSyncResponse(new RedirectSyncResponse(1)); response.setUserSyncResponse(new UserSyncResponse()); LogDeliveryStatus status = new LogDeliveryStatus(REQUEST_ID, SyncResponseResultType.SUCCESS, null); response.setLogSyncResponse(new LogSyncResponse(Collections.singletonList(status))); AvroByteArrayConverter<SyncResponse> converter = new AvroByteArrayConverter<>(SyncResponse.class); operationsDataProcessor.processResponse(converter.toByteArray(response)); } @Test public void testResponseWithNullTransportsAndResponses() throws Exception { KaaClientState state = Mockito.mock(KaaClientState.class); DefaultOperationDataProcessor operationsDataProcessor = new DefaultOperationDataProcessor(state); SyncResponse response = new SyncResponse(); response.setStatus(SyncResponseResultType.SUCCESS); AvroByteArrayConverter<SyncResponse> converter = new AvroByteArrayConverter<>(SyncResponse.class); operationsDataProcessor.processResponse(converter.toByteArray(response)); } @Test public void testResponseWithNullResponses() throws Exception { KaaClientState state = Mockito.mock(KaaClientState.class); DefaultOperationDataProcessor operationsDataProcessor = new DefaultOperationDataProcessor(state); ProfileTransport profileTransport = Mockito.mock(ProfileTransport.class); EventTransport eventTransport = Mockito.mock(EventTransport.class); NotificationTransport notificationTransport = Mockito.mock(NotificationTransport.class); ConfigurationTransport configurationTransport = Mockito.mock(ConfigurationTransport.class); UserTransport userTransport = Mockito.mock(UserTransport.class); RedirectionTransport redirectionTransport = Mockito.mock(RedirectionTransport.class); LogTransport logTransport = Mockito.mock(LogTransport.class); operationsDataProcessor.setConfigurationTransport(configurationTransport); operationsDataProcessor.setEventTransport(eventTransport); operationsDataProcessor.setNotificationTransport(notificationTransport); operationsDataProcessor.setProfileTransport(profileTransport); operationsDataProcessor.setRedirectionTransport(redirectionTransport); operationsDataProcessor.setUserTransport(userTransport); operationsDataProcessor.setLogTransport(logTransport); SyncResponse response = new SyncResponse(); response.setStatus(SyncResponseResultType.SUCCESS); AvroByteArrayConverter<SyncResponse> converter = new AvroByteArrayConverter<>(SyncResponse.class); operationsDataProcessor.processResponse(converter.toByteArray(response)); Mockito.verify(profileTransport, Mockito.times(0)).onProfileResponse(Mockito.any(ProfileSyncResponse.class)); Mockito.verify(eventTransport, Mockito.times(0)).onEventResponse(Mockito.any(EventSyncResponse.class)); Mockito.verify(notificationTransport, Mockito.times(0)).onNotificationResponse(Mockito.any(NotificationSyncResponse.class)); Mockito.verify(configurationTransport, Mockito.times(0)).onConfigurationResponse(Mockito.any(ConfigurationSyncResponse.class)); Mockito.verify(userTransport, Mockito.times(0)).onUserResponse(Mockito.any(UserSyncResponse.class)); Mockito.verify(redirectionTransport, Mockito.times(0)).onRedirectionResponse(Mockito.any(RedirectSyncResponse.class)); Mockito.verify(logTransport, Mockito.times(0)).onLogResponse(Mockito.any(LogSyncResponse.class)); } @Test public void testProfileResync() throws Exception { KaaClientState state = Mockito.mock(KaaClientState.class); DefaultOperationDataProcessor operationsDataProcessor = new DefaultOperationDataProcessor(state); ProfileTransport profileTransport = Mockito.mock(ProfileTransport.class); operationsDataProcessor.setProfileTransport(profileTransport); SyncResponse response = new SyncResponse(); response.setStatus(SyncResponseResultType.PROFILE_RESYNC); AvroByteArrayConverter<SyncResponse> converter = new AvroByteArrayConverter<>(SyncResponse.class); byte[] responseData = converter.toByteArray(response); operationsDataProcessor.processResponse(responseData); Mockito.verify(profileTransport, Mockito.times(1)).sync(); operationsDataProcessor.processResponse(responseData); Mockito.verify(profileTransport, Mockito.times(2)).sync(); response.setStatus(SyncResponseResultType.SUCCESS); responseData = converter.toByteArray(response); operationsDataProcessor.processResponse(responseData); //invocation count still equals 2 because no resync response received Mockito.verify(profileTransport, Mockito.times(2)).sync(); } }