Package com.sequenceiq.cloudbreak.service.stack.flow

Source Code of com.sequenceiq.cloudbreak.service.stack.flow.ProvisionContextTest

package com.sequenceiq.cloudbreak.service.stack.flow;

import static org.mockito.BDDMockito.doNothing;
import static org.mockito.BDDMockito.given;
import static org.mockito.BDDMockito.times;
import static org.mockito.BDDMockito.verify;
import static org.mockito.Matchers.anyLong;
import static org.mockito.Matchers.anyMap;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.any;

import java.util.HashMap;
import java.util.Map;

import org.junit.Before;
import org.junit.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;

import com.sequenceiq.cloudbreak.conf.ReactorConfig;
import com.sequenceiq.cloudbreak.domain.CloudPlatform;
import com.sequenceiq.cloudbreak.domain.Stack;
import com.sequenceiq.cloudbreak.domain.Status;
import com.sequenceiq.cloudbreak.domain.WebsocketEndPoint;
import com.sequenceiq.cloudbreak.repository.RetryingStackUpdater;
import com.sequenceiq.cloudbreak.repository.StackRepository;
import com.sequenceiq.cloudbreak.service.stack.connector.CloudPlatformConnector;
import com.sequenceiq.cloudbreak.service.stack.connector.UserDataBuilder;
import com.sequenceiq.cloudbreak.websocket.WebsocketService;
import com.sequenceiq.cloudbreak.websocket.message.StatusMessage;

import reactor.core.Reactor;
import reactor.event.Event;

public class ProvisionContextTest {

    private static final String DUMMY_USER_DATA = "dummyUserData";
    private static final String DUMMY_NAME = "dummyName";

    @InjectMocks
    private ProvisionContext underTest;

    @Mock
    private StackRepository stackRepository;

    @Mock
    private RetryingStackUpdater stackUpdater;

    @Mock
    private WebsocketService websocketService;

    @Mock
    private Map<CloudPlatform, CloudPlatformConnector> cloudPlatformConnectors;

    @Mock
    private Reactor reactor;

    @Mock
    private UserDataBuilder userDataBuilder;

    @Mock
    private CloudPlatformConnector provisioner;

    private Map<String, Object> setupProperties;

    private Map<String, String> userDataParams;

    private CloudPlatform cloudPlatform;

    private Stack stack;

    @Before
    public void setUp() {
        underTest = new ProvisionContext();
        MockitoAnnotations.initMocks(this);
        setupProperties = new HashMap<>();
        userDataParams = new HashMap<>();
        cloudPlatform = CloudPlatform.AZURE;
        stack = createStack();
    }

    @Test
    public void testBuildStack() {
        // GIVEN
        given(stackRepository.findById(1L)).willReturn(stack);
        given(stackUpdater.updateStackStatus(1L, Status.CREATE_IN_PROGRESS)).willReturn(stack);
        given(stackUpdater.updateStackStatusReason(anyLong(), anyString())).willReturn(stack);
        given(cloudPlatformConnectors.get(any(CloudPlatform.class))).willReturn(provisioner);
        doNothing().when(websocketService).sendToTopicUser(anyString(), any(WebsocketEndPoint.class), any(StatusMessage.class));
        given(userDataBuilder.build(any(CloudPlatform.class), anyString(), anyMap())).willReturn(DUMMY_USER_DATA);
        doNothing().when(provisioner).buildStack(stack, DUMMY_USER_DATA, setupProperties);
        // WHEN
        underTest.buildStack(cloudPlatform, 1L, setupProperties, userDataParams);
        // THEN
        verify(provisioner, times(0)).buildStack(stack, DUMMY_USER_DATA, setupProperties);
    }

    @Test
    public void testBuildStackWhenStatusIsNotRequested() {
        // GIVEN
        stack.setStatus(Status.CREATE_FAILED);
        given(stackRepository.findById(1L)).willReturn(stack);
        // WHEN
        underTest.buildStack(cloudPlatform, 1L, setupProperties, userDataParams);
        // THEN
        verify(reactor, times(0)).notify(any(ReactorConfig.class), any(Event.class));
        verify(websocketService, times(0)).sendToTopicUser(anyString(), any(WebsocketEndPoint.class), any(StatusMessage.class));
    }

    @Test
    public void testBuildStackWhenExceptionOccurs() {
        // GIVEN
        given(stackRepository.findById(1L)).willReturn(stack);
        given(stackRepository.findOneWithLists(1L)).willReturn(stack);
        given(stackUpdater.updateStackStatus(1L, Status.CREATE_IN_PROGRESS)).willThrow(new IllegalStateException());
        // WHEN
        underTest.buildStack(cloudPlatform, 1L, setupProperties, userDataParams);
        // THEN
        verify(provisioner, times(0)).buildStack(stack, DUMMY_USER_DATA, setupProperties);
        verify(reactor, times(1)).notify(any(ReactorConfig.class), any(Event.class));
    }

    private Stack createStack() {
        Stack stack = new Stack();
        stack.setId(1L);
        stack.setStatus(Status.REQUESTED);
        stack.setName(DUMMY_NAME);
        stack.setOwner("gipszjakab@myemail.com");
        return stack;
    }
}
TOP

Related Classes of com.sequenceiq.cloudbreak.service.stack.flow.ProvisionContextTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.