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

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

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

import static org.mockito.BDDMockito.given;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyBoolean;
import static org.mockito.Matchers.anyLong;
import static org.mockito.Matchers.anySet;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;

import java.util.HashSet;
import java.util.Set;

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.Stack;
import com.sequenceiq.cloudbreak.repository.RetryingStackUpdater;
import com.sequenceiq.cloudbreak.repository.StackRepository;

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

public class AmbariRoleAllocatorTest {
    @InjectMocks
    private AmbariRoleAllocator underTest;

    @Mock
    private StackRepository stackRepository;

    @Mock
    private RetryingStackUpdater stackUpdater;

    @Mock
    private Reactor reactor;

    private Set<CoreInstanceMetaData> coreInstanceMetaData;

    private Stack stack;

    @Before
    public void setUp() {
        underTest = new AmbariRoleAllocator();
        MockitoAnnotations.initMocks(this);
        coreInstanceMetaData = createCoreInstanceMetaData();
        stack = createStack();
    }

    @Test
    public void testAllocateRoles() {
        // GIVEN
        given(stackRepository.findById(1L)).willReturn(stack);
        given(stackUpdater.updateStackMetaData(anyLong(), anySet())).willReturn(stack);
        given(stackUpdater.updateMetadataReady(1L, true)).willReturn(updatedStack());
        // WHEN
        underTest.allocateRoles(1L, coreInstanceMetaData);
        // THEN
        verify(reactor, times(1)).notify(any(ReactorConfig.class), any(Event.class));
        verify(stackUpdater, times(1)).updateMetadataReady(anyLong(), anyBoolean());
    }

    @Test
    public void testAllocateRolesWhenStackMetaDataIsReady() {
        // GIVEN
        stack.setMetadataReady(true);
        given(stackRepository.findById(1L)).willReturn(stack);
        // WHEN
        underTest.allocateRoles(1L, coreInstanceMetaData);
        // THEN
        verify(reactor, times(0)).notify(any(ReactorConfig.class), any(Event.class));
        verify(stackUpdater, times(0)).updateMetadataReady(anyLong(), anyBoolean());
    }

    @Test
    public void testAllocateRolesWhenStackNodeCountAndMetaDataSizeIsNotEqual() {
        // GIVEN
        stack.setNodeCount(3);
        given(stackRepository.findById(1L)).willReturn(stack);
        given(stackRepository.findOneWithLists(1L)).willReturn(stack);
        // WHEN
        underTest.allocateRoles(1L, coreInstanceMetaData);
        // THEN
        verify(reactor, times(1)).notify(any(ReactorConfig.class), any(Event.class));
        verify(stackUpdater, times(0)).updateMetadataReady(anyLong(), anyBoolean());
    }

    @Test
    public void testAllocateRolesWhenExceptionOccurs() {
        // GIVEN
        given(stackRepository.findById(1L)).willThrow(new IllegalStateException());
        given(stackRepository.findOneWithLists(1L)).willReturn(stack);
        // WHEN
        underTest.allocateRoles(1L, coreInstanceMetaData);
        // THEN
        verify(reactor, times(1)).notify(any(ReactorConfig.class), any(Event.class));
        verify(stackUpdater, times(0)).updateMetadataReady(anyLong(), anyBoolean());
    }

    private Set<CoreInstanceMetaData> createCoreInstanceMetaData() {
        Set<CoreInstanceMetaData> metaData = new HashSet<>();
        CoreInstanceMetaData data1 = new CoreInstanceMetaData("instanceId1", "123.123.123.123", "dummyPublicIp1", 3, "john1.john.j5.internal.cloudapp.net");
        CoreInstanceMetaData data2 = new CoreInstanceMetaData("instanceId2", "123.123.123.124", "dummyPublicIp2", 3, "john2.john.j5.internal.cloudapp.net");
        metaData.add(data1);
        metaData.add(data2);
        return metaData;
    }

    private Stack createStack() {
        Stack stack = new Stack();
        stack.setNodeCount(2);
        stack.setId(1L);
        return stack;
    }

    private Stack updatedStack() {
        Stack stack = new Stack();
        stack.setNodeCount(2);
        stack.setId(1L);
        stack.setMetadataReady(true);
        return stack;
    }
}
TOP

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

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.