package org.ovirt.engine.core.vdsbroker.monitoring;
import java.util.ArrayList;
import java.util.HashMap;
import org.ovirt.engine.core.common.businessentities.VM;
import org.ovirt.engine.core.common.businessentities.VMStatus;
import org.ovirt.engine.core.common.businessentities.VmDynamic;
import org.ovirt.engine.core.common.businessentities.VmExitStatus;
import org.ovirt.engine.core.common.businessentities.VmStatistics;
import org.ovirt.engine.core.common.utils.Pair;
import org.ovirt.engine.core.compat.Guid;
public enum VmTestPairs {
EXTERNAL_VM("0") {
@Override
Pair<VM, VdsmVm> build() {
return pairOf(null, createVmInternalData());
}
},
DB_ONLY_NOT_RUNNING("1") {
@Override
Pair<VM, VdsmVm> build() {
return pairOf(createDbVm(), null);
}
},
STATUS_CHANGED_TO_UP("2") {
@Override
Pair<VM, VdsmVm> build() {
return createStatusChangedToUp();
}
},
STATUS_CHANGED_TO_DOWN("3") {
@Override
Pair<VM, VdsmVm> build() {
return createStatusChangedToDown();
}
},
MIGRATING_FROM("4") {
@Override
Pair<VM, VdsmVm> build() {
return createMigratingFrom();
}
},
MIGRATING_TO("5") {
@Override
Pair<VM, VdsmVm> build() {
return createMigratingTo();
}
},
MIGRATION_DONE("6") {
@Override
Pair<VM, VdsmVm> build() {
return createMigrationDone();
}
},
MIGRATION_FAILED("7") {
@Override
Pair<VM, VdsmVm> build() {
return createMigrationFailed();
}
},
HA_VM_CRASHED("8") {
@Override
Pair<VM, VdsmVm> build() {
return createHAThatShutdownAbnormally();
}
},
DST_VM_WITH_STATUS_UP("9") {
@Override
Pair<VM, VdsmVm> build() {
Pair<VM, VdsmVm> pair = pairOf(createDbVm(), createVmInternalData());
pair.getSecond().getVmDynamic().setStatus(VMStatus.Up);
pair.getSecond().getVmDynamic().setRunOnVds(DST_HOST_ID);
return pair;
}
},
DST_VM_WITH_STATUS_MIGRATING_TO("A") {
@Override
Pair<VM, VdsmVm> build() {
Pair<VM, VdsmVm> pair = pairOf(createDbVm(), createVmInternalData());
pair.getSecond().getVmDynamic().setStatus(VMStatus.MigratingTo);
pair.getSecond().getVmDynamic().setRunOnVds(DST_HOST_ID);
return pair;
}
},
HA_VM_NOT_RUNNING_AND_UNKNOWN("B") {
@Override
Pair<VM, VdsmVm> build() {
return createHANotRunningAndUknown();
}
};
public static final Guid DST_HOST_ID = Guid.newGuid();
public static final Guid SRC_HOST_ID = Guid.newGuid();
public static final Guid CLUSTER_ID = Guid.newGuid();
Guid id;
private Pair<VM, VdsmVm> pair;
VmTestPairs(String id) {
this.id = Guid.createGuidFromString(id + "0000000-0000-0000-0000-000000000000");
pair = build();
}
abstract Pair<VM, VdsmVm> build();
void reset() {
pair = build();
}
VM dbVm() {
return pair.getFirst();
}
VdsmVm vdsmVm() {
return pair.getSecond();
}
Pair<VM, VdsmVm> createStatusChangedToUp() {
Pair<VM, VdsmVm> pair = createPair();
setPairStatuses(pair, VMStatus.Down, VMStatus.Up);
return pair;
}
Pair<VM, VdsmVm> createStatusChangedToDown() {
Pair<VM, VdsmVm> pair = createPair();
setPairStatuses(pair, VMStatus.Up, VMStatus.Down);
pair.getSecond().getVmDynamic().setExitStatus(VmExitStatus.Normal);
return pair;
}
Pair<VM, VdsmVm> createMigratingFrom() {
Pair<VM, VdsmVm> pair = createPair();
setPairStatuses(pair, VMStatus.MigratingFrom, VMStatus.MigratingFrom);
setDstHost(pair);
return pair;
}
Pair<VM, VdsmVm> createMigratingTo() {
Pair<VM, VdsmVm> pair = createPair();
setPairStatuses(pair, VMStatus.MigratingFrom, VMStatus.MigratingTo);
setDstHost(pair);
return pair;
}
Pair<VM, VdsmVm> createMigrationDone() {
Pair<VM, VdsmVm> pair = createPair();
setPairStatuses(pair, VMStatus.MigratingFrom, VMStatus.Down);
pair.getSecond().getVmDynamic().setExitStatus(VmExitStatus.Normal);
setDstHost(pair);
return pair;
}
private void setDstHost(Pair<VM, VdsmVm> pair) {
pair.getFirst().setMigratingToVds(DST_HOST_ID);
}
Pair<VM, VdsmVm> createMigrationFailed() {
Pair<VM, VdsmVm> pair = createPair();
setPairStatuses(pair, VMStatus.MigratingFrom, VMStatus.Up);
setDstHost(pair);
return pair;
}
Pair<VM, VdsmVm> createHAThatShutdownAbnormally() {
Pair<VM, VdsmVm> pair = createPair();
pair.getFirst().setAutoStartup(true);
setPairStatuses(pair, VMStatus.Up, VMStatus.Down);
pair.getSecond().getVmDynamic().setExitStatus(VmExitStatus.Error);
return pair;
}
Pair<VM, VdsmVm> createHANotRunningAndUknown() {
Pair<VM, VdsmVm> pair = pairOf(createDbVm(), null);
pair.getFirst().setAutoStartup(true);
pair.getFirst().setStatus(VMStatus.Unknown);
// pair.getSecond().getVmDynamic().setExitStatus(VmExitStatus.Error);
return pair;
}
Pair<VM, VdsmVm> createPair() {
Pair<VM, VdsmVm> pair = pairOf(createDbVm(), createVmInternalData());
addWatchDogEvents(pair);
addClientIpChanged(pair);
return pair;
}
Pair<VM, VdsmVm> pairOf(VM vm, VdsmVm vit) {
return new Pair<>(vm, vit);
}
VM createDbVm() {
VM vm = new VM();
vm.setDynamicData(new VmDynamic());
vm.setId(id);
vm.setName(name());
vm.setRunOnVds(SRC_HOST_ID);
return vm;
}
private void setPairStatuses(Pair<VM, VdsmVm> pair, VMStatus dbStatus, VMStatus vdsmStatus) {
pair.getFirst().setStatus(dbStatus);
pair.getSecond().getVmDynamic().setStatus(vdsmStatus);
}
VdsmVm createVmInternalData() {
VmDynamic vmDynamic = new VmDynamic();
vmDynamic.setId(id);
vmDynamic.setRunOnVds(SRC_HOST_ID);
return new VdsmVm(-1d)
.setVmDynamic(vmDynamic)
.setVmStatistics(new VmStatistics())
.setInterfaceStatistics(new ArrayList<>())
.setLunsMap(new HashMap<>());
}
private void addWatchDogEvents(Pair<VM, VdsmVm> pair) {
pair.getFirst().getDynamicData().setLastWatchdogEvent(Long.MIN_VALUE);
pair.getSecond().getVmDynamic().setLastWatchdogEvent(Long.MAX_VALUE);
}
private void addClientIpChanged(Pair<VM, VdsmVm> pair) {
pair.getFirst().setClientIp("1.1.1.1");
pair.getSecond().getVmDynamic().setClientIp("2.2.2.2");
}
}