package org.zstack.test.image;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.mockito.*;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import org.zstack.core.Platform;
import org.zstack.core.cloudbus.CloudBus;
import org.zstack.core.cloudbus.CloudBusCallBack;
import org.zstack.header.errorcode.ErrorCode;
import org.zstack.header.image.*;
import org.zstack.header.message.Message;
import org.zstack.header.message.MessageReply;
import org.zstack.header.storage.backup.SyncImageSizeOnBackupStorageMsg;
import org.zstack.header.storage.backup.SyncImageSizeOnBackupStorageReply;
import org.zstack.image.ImageBase;
import java.util.Collections;
/**
* Created by david on 2/9/17.
*/
public class TestSyncImageSize {
@InjectMocks
private ImageBase imageBase;
@Mock
private CloudBus mockBus;
private final ImageVO vo = new ImageVO();
@Before
public void setUp() {
vo.setUuid(Platform.getUuid());
vo.setMediaType(ImageConstant.ImageMediaType.RootVolumeTemplate);
vo.setStatus(ImageStatus.Ready);
vo.setState(ImageState.Enabled);
vo.setBackupStorageRefs(Collections.emptySet());
imageBase = new ImageBase(vo);
MockitoAnnotations.initMocks(this);
}
@Test
public void testSyncImageSize() {
SyncImageSizeMsg msg = new SyncImageSizeMsg();
msg.setImageUuid(vo.getUuid());
msg.setBackupStorageUuid(Platform.getUuid());
SyncImageSizeOnBackupStorageReply reply = new SyncImageSizeOnBackupStorageReply();
reply.setError(new ErrorCode("1000", "unexpected error"));
Mockito.doAnswer(new Answer<Void>() {
@Override
public Void answer(InvocationOnMock invocation) throws Throwable {
final Object[] args = invocation.getArguments();
CloudBusCallBack comp = (CloudBusCallBack)args[1];
comp.run(reply);
return null;
}
}).when(mockBus).send(Matchers.any(SyncImageSizeOnBackupStorageMsg.class), Matchers.anyObject());
imageBase.handleMessage(msg);
ArgumentCaptor<MessageReply> argument = ArgumentCaptor.forClass(MessageReply.class);
Mockito.verify(mockBus).reply(Mockito.any(Message.class), argument.capture());
Assert.assertEquals(reply.getError().getCode(), argument.getValue().getError().getCode());
Assert.assertEquals(reply.getError().getDescription(), argument.getValue().getError().getDescription());
}
}