tests
This commit is contained in:
parent
927e690f7f
commit
cdda4caa07
6 changed files with 320 additions and 349 deletions
|
@ -19,8 +19,6 @@ import info.nightscout.androidaps.interfaces.ActivePluginProvider
|
||||||
import info.nightscout.androidaps.interfaces.CommandQueueProvider
|
import info.nightscout.androidaps.interfaces.CommandQueueProvider
|
||||||
import info.nightscout.androidaps.interfaces.Constraint
|
import info.nightscout.androidaps.interfaces.Constraint
|
||||||
import info.nightscout.androidaps.logging.AAPSLogger
|
import info.nightscout.androidaps.logging.AAPSLogger
|
||||||
import info.nightscout.androidaps.logging.L
|
|
||||||
import info.nightscout.androidaps.logging.L.isEnabled
|
|
||||||
import info.nightscout.androidaps.logging.LTag
|
import info.nightscout.androidaps.logging.LTag
|
||||||
import info.nightscout.androidaps.plugins.bus.RxBusWrapper
|
import info.nightscout.androidaps.plugins.bus.RxBusWrapper
|
||||||
import info.nightscout.androidaps.plugins.configBuilder.ConstraintChecker
|
import info.nightscout.androidaps.plugins.configBuilder.ConstraintChecker
|
||||||
|
@ -33,6 +31,7 @@ import info.nightscout.androidaps.queue.commands.*
|
||||||
import info.nightscout.androidaps.queue.commands.Command.CommandType
|
import info.nightscout.androidaps.queue.commands.Command.CommandType
|
||||||
import info.nightscout.androidaps.utils.HtmlHelper
|
import info.nightscout.androidaps.utils.HtmlHelper
|
||||||
import info.nightscout.androidaps.utils.resources.ResourceHelper
|
import info.nightscout.androidaps.utils.resources.ResourceHelper
|
||||||
|
import info.nightscout.androidaps.utils.sharedPreferences.SP
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
import javax.inject.Singleton
|
import javax.inject.Singleton
|
||||||
|
@ -87,7 +86,8 @@ class CommandQueue @Inject constructor(
|
||||||
val constraintChecker: ConstraintChecker,
|
val constraintChecker: ConstraintChecker,
|
||||||
val profileFunction: ProfileFunction,
|
val profileFunction: ProfileFunction,
|
||||||
val activePlugin: Lazy<ActivePluginProvider>,
|
val activePlugin: Lazy<ActivePluginProvider>,
|
||||||
val mainApp: MainApp
|
val context: Context,
|
||||||
|
val sp: SP
|
||||||
) : CommandQueueProvider {
|
) : CommandQueueProvider {
|
||||||
|
|
||||||
private val queue = LinkedList<Command>()
|
private val queue = LinkedList<Command>()
|
||||||
|
@ -161,7 +161,7 @@ class CommandQueue @Inject constructor(
|
||||||
SystemClock.sleep(500)
|
SystemClock.sleep(500)
|
||||||
}
|
}
|
||||||
if (thread == null || thread!!.state == Thread.State.TERMINATED) {
|
if (thread == null || thread!!.state == Thread.State.TERMINATED) {
|
||||||
thread = QueueThread(this)
|
thread = QueueThread(this, context, aapsLogger, rxBus, activePlugin.get(), resourceHelper, sp)
|
||||||
thread!!.start()
|
thread!!.start()
|
||||||
aapsLogger.debug(LTag.PUMPQUEUE, "Starting new thread")
|
aapsLogger.debug(LTag.PUMPQUEUE, "Starting new thread")
|
||||||
} else {
|
} else {
|
||||||
|
@ -171,7 +171,7 @@ class CommandQueue @Inject constructor(
|
||||||
|
|
||||||
override fun independentConnect(reason: String, callback: Callback?) {
|
override fun independentConnect(reason: String, callback: Callback?) {
|
||||||
aapsLogger.debug(LTag.PUMPQUEUE, "Starting new queue")
|
aapsLogger.debug(LTag.PUMPQUEUE, "Starting new queue")
|
||||||
val tempCommandQueue = CommandQueue(injector, aapsLogger, rxBus, resourceHelper, constraintChecker, profileFunction, activePlugin, mainApp)
|
val tempCommandQueue = CommandQueue(injector, aapsLogger, rxBus, resourceHelper, constraintChecker, profileFunction, activePlugin, context, sp)
|
||||||
tempCommandQueue.readStatus(reason, callback)
|
tempCommandQueue.readStatus(reason, callback)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -470,26 +470,24 @@ class CommandQueue @Inject constructor(
|
||||||
return if (current != null) {
|
return if (current != null) {
|
||||||
val result = activePump.isThisProfileSet(profile)
|
val result = activePump.isThisProfileSet(profile)
|
||||||
if (!result) {
|
if (!result) {
|
||||||
if (isEnabled(L.PUMPQUEUE)) {
|
aapsLogger.debug(LTag.PUMPQUEUE, "Current profile: $current")
|
||||||
aapsLogger.debug(LTag.PUMPQUEUE, "Current profile: $current")
|
aapsLogger.debug(LTag.PUMPQUEUE, "New profile: $profile")
|
||||||
aapsLogger.debug(LTag.PUMPQUEUE, "New profile: $profile")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
result
|
result
|
||||||
} else true
|
} else true
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun showBolusProgressDialog(insulin: Double, context: Context?) {
|
private fun showBolusProgressDialog(insulin: Double, ctx: Context?) {
|
||||||
if (context != null) {
|
if (ctx != null) {
|
||||||
val bolusProgressDialog = BolusProgressDialog()
|
val bolusProgressDialog = BolusProgressDialog()
|
||||||
bolusProgressDialog.setInsulin(insulin)
|
bolusProgressDialog.setInsulin(insulin)
|
||||||
bolusProgressDialog.show((context as AppCompatActivity).supportFragmentManager, "BolusProgress")
|
bolusProgressDialog.show((ctx as AppCompatActivity).supportFragmentManager, "BolusProgress")
|
||||||
} else {
|
} else {
|
||||||
val i = Intent()
|
val i = Intent()
|
||||||
i.putExtra("insulin", insulin)
|
i.putExtra("insulin", insulin)
|
||||||
i.setClass(mainApp, BolusProgressHelperActivity::class.java)
|
i.setClass(context, BolusProgressHelperActivity::class.java)
|
||||||
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||||
mainApp.startActivity(i)
|
context.startActivity(i)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -5,85 +5,78 @@ import android.content.Context;
|
||||||
import android.os.PowerManager;
|
import android.os.PowerManager;
|
||||||
import android.os.SystemClock;
|
import android.os.SystemClock;
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
|
|
||||||
import info.nightscout.androidaps.Constants;
|
import info.nightscout.androidaps.Constants;
|
||||||
import info.nightscout.androidaps.MainApp;
|
|
||||||
import info.nightscout.androidaps.R;
|
import info.nightscout.androidaps.R;
|
||||||
import info.nightscout.androidaps.events.EventPumpStatusChanged;
|
import info.nightscout.androidaps.events.EventPumpStatusChanged;
|
||||||
|
import info.nightscout.androidaps.interfaces.ActivePluginProvider;
|
||||||
import info.nightscout.androidaps.interfaces.PumpInterface;
|
import info.nightscout.androidaps.interfaces.PumpInterface;
|
||||||
import info.nightscout.androidaps.logging.L;
|
import info.nightscout.androidaps.logging.AAPSLogger;
|
||||||
import info.nightscout.androidaps.logging.StacktraceLoggerWrapper;
|
import info.nightscout.androidaps.logging.LTag;
|
||||||
import info.nightscout.androidaps.plugins.bus.RxBus;
|
import info.nightscout.androidaps.plugins.bus.RxBusWrapper;
|
||||||
import info.nightscout.androidaps.plugins.configBuilder.ConfigBuilderPlugin;
|
|
||||||
import info.nightscout.androidaps.plugins.general.overview.events.EventDismissBolusProgressIfRunning;
|
import info.nightscout.androidaps.plugins.general.overview.events.EventDismissBolusProgressIfRunning;
|
||||||
import info.nightscout.androidaps.queue.events.EventQueueChanged;
|
import info.nightscout.androidaps.queue.events.EventQueueChanged;
|
||||||
import info.nightscout.androidaps.utils.SP;
|
|
||||||
import info.nightscout.androidaps.utils.T;
|
import info.nightscout.androidaps.utils.T;
|
||||||
|
import info.nightscout.androidaps.utils.resources.ResourceHelper;
|
||||||
|
import info.nightscout.androidaps.utils.sharedPreferences.SP;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by mike on 09.11.2017.
|
* Created by mike on 09.11.2017.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public class QueueThread extends Thread {
|
public class QueueThread extends Thread {
|
||||||
private Logger log = StacktraceLoggerWrapper.getLogger(L.PUMPQUEUE);
|
|
||||||
|
|
||||||
private CommandQueue queue;
|
private CommandQueue queue;
|
||||||
|
private AAPSLogger aapsLogger;
|
||||||
|
private RxBusWrapper rxBus;
|
||||||
|
private ActivePluginProvider activePlugin;
|
||||||
|
private ResourceHelper resourceHelper;
|
||||||
|
private SP sp;
|
||||||
|
|
||||||
private boolean connectLogged = false;
|
private boolean connectLogged = false;
|
||||||
boolean waitingForDisconnect = false;
|
boolean waitingForDisconnect = false;
|
||||||
|
|
||||||
private PowerManager.WakeLock mWakeLock;
|
private PowerManager.WakeLock mWakeLock;
|
||||||
|
|
||||||
QueueThread(CommandQueue queue) {
|
QueueThread(CommandQueue queue, Context context, AAPSLogger aapsLogger, RxBusWrapper rxBus, ActivePluginProvider activePlugin, ResourceHelper resourceHelper, SP sp) {
|
||||||
super();
|
super();
|
||||||
|
|
||||||
this.queue = queue;
|
this.queue = queue;
|
||||||
Context context = MainApp.instance().getApplicationContext();
|
this.aapsLogger = aapsLogger;
|
||||||
if (context != null) {
|
this.rxBus = rxBus;
|
||||||
PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
|
this.activePlugin = activePlugin;
|
||||||
if (powerManager != null)
|
this.resourceHelper = resourceHelper;
|
||||||
mWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "AndroidAPS:QueueThread");
|
this.sp = sp;
|
||||||
}
|
|
||||||
|
PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
|
||||||
|
if (powerManager != null)
|
||||||
|
mWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "AndroidAPS:QueueThread");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final void run() {
|
public final void run() {
|
||||||
if (mWakeLock != null)
|
if (mWakeLock != null)
|
||||||
mWakeLock.acquire(T.mins(10).msecs());
|
mWakeLock.acquire(T.mins(10).msecs());
|
||||||
RxBus.Companion.getINSTANCE().send(new EventQueueChanged());
|
rxBus.send(new EventQueueChanged());
|
||||||
long lastCommandTime;
|
long lastCommandTime;
|
||||||
long connectionStartTime = lastCommandTime = System.currentTimeMillis();
|
long connectionStartTime = lastCommandTime = System.currentTimeMillis();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
while (true) {
|
while (true) {
|
||||||
PumpInterface pump = ConfigBuilderPlugin.getPlugin().getActivePump();
|
|
||||||
if (pump == null) {
|
|
||||||
if (L.isEnabled(L.PUMPQUEUE))
|
|
||||||
log.debug("pump == null");
|
|
||||||
RxBus.Companion.getINSTANCE().send(new EventPumpStatusChanged(MainApp.gs(R.string.pumpNotInitialized)));
|
|
||||||
SystemClock.sleep(1000);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
long secondsElapsed = (System.currentTimeMillis() - connectionStartTime) / 1000;
|
long secondsElapsed = (System.currentTimeMillis() - connectionStartTime) / 1000;
|
||||||
|
PumpInterface pump = activePlugin.getActivePump();
|
||||||
if (!pump.isConnected() && secondsElapsed > Constants.PUMP_MAX_CONNECTION_TIME_IN_SECONDS) {
|
if (!pump.isConnected() && secondsElapsed > Constants.PUMP_MAX_CONNECTION_TIME_IN_SECONDS) {
|
||||||
RxBus.Companion.getINSTANCE().send(new EventDismissBolusProgressIfRunning(null));
|
rxBus.send(new EventDismissBolusProgressIfRunning(null));
|
||||||
RxBus.Companion.getINSTANCE().send(new EventPumpStatusChanged(MainApp.gs(R.string.connectiontimedout)));
|
rxBus.send(new EventPumpStatusChanged(resourceHelper.gs(R.string.connectiontimedout)));
|
||||||
if (L.isEnabled(L.PUMPQUEUE))
|
aapsLogger.debug(LTag.PUMPQUEUE, "timed out");
|
||||||
log.debug("timed out");
|
|
||||||
pump.stopConnecting();
|
pump.stopConnecting();
|
||||||
|
|
||||||
//BLUETOOTH-WATCHDOG
|
//BLUETOOTH-WATCHDOG
|
||||||
boolean watchdog = SP.getBoolean(R.string.key_btwatchdog, false);
|
boolean watchdog = sp.getBoolean(R.string.key_btwatchdog, false);
|
||||||
long last_watchdog = SP.getLong(R.string.key_btwatchdog_lastbark, 0L);
|
long last_watchdog = sp.getLong(R.string.key_btwatchdog_lastbark, 0L);
|
||||||
watchdog = watchdog && System.currentTimeMillis() - last_watchdog > (Constants.MIN_WATCHDOG_INTERVAL_IN_SECONDS * 1000);
|
watchdog = watchdog && System.currentTimeMillis() - last_watchdog > (Constants.MIN_WATCHDOG_INTERVAL_IN_SECONDS * 1000);
|
||||||
if (watchdog) {
|
if (watchdog) {
|
||||||
if (L.isEnabled(L.PUMPQUEUE))
|
aapsLogger.debug(LTag.PUMPQUEUE, "BT watchdog - toggeling the phonest bluetooth");
|
||||||
log.debug("BT watchdog - toggeling the phonest bluetooth");
|
|
||||||
//write time
|
//write time
|
||||||
SP.putLong(R.string.key_btwatchdog_lastbark, System.currentTimeMillis());
|
sp.putLong(R.string.key_btwatchdog_lastbark, System.currentTimeMillis());
|
||||||
//toggle BT
|
//toggle BT
|
||||||
pump.stopConnecting();
|
pump.stopConnecting();
|
||||||
pump.disconnect("watchdog");
|
pump.disconnect("watchdog");
|
||||||
|
@ -95,40 +88,36 @@ public class QueueThread extends Thread {
|
||||||
SystemClock.sleep(1000);
|
SystemClock.sleep(1000);
|
||||||
//start over again once after watchdog barked
|
//start over again once after watchdog barked
|
||||||
//Notification notification = new Notification(Notification.OLD_NSCLIENT, "Watchdog", Notification.URGENT);
|
//Notification notification = new Notification(Notification.OLD_NSCLIENT, "Watchdog", Notification.URGENT);
|
||||||
//RxBus.Companion.getINSTANCE().send(new EventNewNotification(notification));
|
//rxBus.send(new EventNewNotification(notification));
|
||||||
connectionStartTime = lastCommandTime = System.currentTimeMillis();
|
connectionStartTime = lastCommandTime = System.currentTimeMillis();
|
||||||
pump.connect("watchdog");
|
pump.connect("watchdog");
|
||||||
} else {
|
} else {
|
||||||
queue.clear();
|
queue.clear();
|
||||||
if (L.isEnabled(L.PUMPQUEUE))
|
aapsLogger.debug(LTag.PUMPQUEUE, "no connection possible");
|
||||||
log.debug("no connection possible");
|
rxBus.send(new EventPumpStatusChanged(EventPumpStatusChanged.Status.DISCONNECTING));
|
||||||
RxBus.Companion.getINSTANCE().send(new EventPumpStatusChanged(EventPumpStatusChanged.Status.DISCONNECTING));
|
|
||||||
pump.disconnect("Queue empty");
|
pump.disconnect("Queue empty");
|
||||||
RxBus.Companion.getINSTANCE().send(new EventPumpStatusChanged(EventPumpStatusChanged.Status.DISCONNECTED));
|
rxBus.send(new EventPumpStatusChanged(EventPumpStatusChanged.Status.DISCONNECTED));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pump.isHandshakeInProgress()) {
|
if (pump.isHandshakeInProgress()) {
|
||||||
if (L.isEnabled(L.PUMPQUEUE))
|
aapsLogger.debug(LTag.PUMPQUEUE, "handshaking " + secondsElapsed);
|
||||||
log.debug("handshaking " + secondsElapsed);
|
rxBus.send(new EventPumpStatusChanged(EventPumpStatusChanged.Status.HANDSHAKING, (int) secondsElapsed));
|
||||||
RxBus.Companion.getINSTANCE().send(new EventPumpStatusChanged(EventPumpStatusChanged.Status.HANDSHAKING, (int) secondsElapsed));
|
|
||||||
SystemClock.sleep(100);
|
SystemClock.sleep(100);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pump.isConnecting()) {
|
if (pump.isConnecting()) {
|
||||||
if (L.isEnabled(L.PUMPQUEUE))
|
aapsLogger.debug(LTag.PUMPQUEUE, "connecting " + secondsElapsed);
|
||||||
log.debug("connecting " + secondsElapsed);
|
rxBus.send(new EventPumpStatusChanged(EventPumpStatusChanged.Status.CONNECTING, (int) secondsElapsed));
|
||||||
RxBus.Companion.getINSTANCE().send(new EventPumpStatusChanged(EventPumpStatusChanged.Status.CONNECTING, (int) secondsElapsed));
|
|
||||||
SystemClock.sleep(1000);
|
SystemClock.sleep(1000);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!pump.isConnected()) {
|
if (!pump.isConnected()) {
|
||||||
if (L.isEnabled(L.PUMPQUEUE))
|
aapsLogger.debug(LTag.PUMPQUEUE, "connect");
|
||||||
log.debug("connect");
|
rxBus.send(new EventPumpStatusChanged(EventPumpStatusChanged.Status.CONNECTING, (int) secondsElapsed));
|
||||||
RxBus.Companion.getINSTANCE().send(new EventPumpStatusChanged(EventPumpStatusChanged.Status.CONNECTING, (int) secondsElapsed));
|
|
||||||
pump.connect("Connection needed");
|
pump.connect("Connection needed");
|
||||||
SystemClock.sleep(1000);
|
SystemClock.sleep(1000);
|
||||||
continue;
|
continue;
|
||||||
|
@ -137,19 +126,17 @@ public class QueueThread extends Thread {
|
||||||
if (queue.performing() == null) {
|
if (queue.performing() == null) {
|
||||||
if (!connectLogged) {
|
if (!connectLogged) {
|
||||||
connectLogged = true;
|
connectLogged = true;
|
||||||
if (L.isEnabled(L.PUMPQUEUE))
|
aapsLogger.debug(LTag.PUMPQUEUE, "connection time " + secondsElapsed + "s");
|
||||||
log.debug("connection time " + secondsElapsed + "s");
|
|
||||||
}
|
}
|
||||||
// Pickup 1st command and set performing variable
|
// Pickup 1st command and set performing variable
|
||||||
if (queue.size() > 0) {
|
if (queue.size() > 0) {
|
||||||
queue.pickup();
|
queue.pickup();
|
||||||
if (queue.performing() != null) {
|
if (queue.performing() != null) {
|
||||||
if (L.isEnabled(L.PUMPQUEUE))
|
aapsLogger.debug(LTag.PUMPQUEUE, "performing " + queue.performing().status());
|
||||||
log.debug("performing " + queue.performing().status());
|
rxBus.send(new EventQueueChanged());
|
||||||
RxBus.Companion.getINSTANCE().send(new EventQueueChanged());
|
|
||||||
queue.performing().execute();
|
queue.performing().execute();
|
||||||
queue.resetPerforming();
|
queue.resetPerforming();
|
||||||
RxBus.Companion.getINSTANCE().send(new EventQueueChanged());
|
rxBus.send(new EventQueueChanged());
|
||||||
lastCommandTime = System.currentTimeMillis();
|
lastCommandTime = System.currentTimeMillis();
|
||||||
SystemClock.sleep(100);
|
SystemClock.sleep(100);
|
||||||
continue;
|
continue;
|
||||||
|
@ -161,17 +148,14 @@ public class QueueThread extends Thread {
|
||||||
long secondsFromLastCommand = (System.currentTimeMillis() - lastCommandTime) / 1000;
|
long secondsFromLastCommand = (System.currentTimeMillis() - lastCommandTime) / 1000;
|
||||||
if (secondsFromLastCommand >= 5) {
|
if (secondsFromLastCommand >= 5) {
|
||||||
waitingForDisconnect = true;
|
waitingForDisconnect = true;
|
||||||
if (L.isEnabled(L.PUMPQUEUE))
|
aapsLogger.debug(LTag.PUMPQUEUE, "queue empty. disconnect");
|
||||||
log.debug("queue empty. disconnect");
|
rxBus.send(new EventPumpStatusChanged(EventPumpStatusChanged.Status.DISCONNECTING));
|
||||||
RxBus.Companion.getINSTANCE().send(new EventPumpStatusChanged(EventPumpStatusChanged.Status.DISCONNECTING));
|
|
||||||
pump.disconnect("Queue empty");
|
pump.disconnect("Queue empty");
|
||||||
RxBus.Companion.getINSTANCE().send(new EventPumpStatusChanged(EventPumpStatusChanged.Status.DISCONNECTED));
|
rxBus.send(new EventPumpStatusChanged(EventPumpStatusChanged.Status.DISCONNECTED));
|
||||||
if (L.isEnabled(L.PUMPQUEUE))
|
aapsLogger.debug(LTag.PUMPQUEUE, "disconnected");
|
||||||
log.debug("disconnected");
|
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
if (L.isEnabled(L.PUMPQUEUE))
|
aapsLogger.debug(LTag.PUMPQUEUE, "waiting for disconnect");
|
||||||
log.debug("waiting for disconnect");
|
|
||||||
SystemClock.sleep(1000);
|
SystemClock.sleep(1000);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -179,8 +163,7 @@ public class QueueThread extends Thread {
|
||||||
} finally {
|
} finally {
|
||||||
if (mWakeLock != null && mWakeLock.isHeld())
|
if (mWakeLock != null && mWakeLock.isHeld())
|
||||||
mWakeLock.release();
|
mWakeLock.release();
|
||||||
if (L.isEnabled(L.PUMPQUEUE))
|
aapsLogger.debug(LTag.PUMPQUEUE, "thread end");
|
||||||
log.debug("thread end");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,51 +0,0 @@
|
||||||
package info.nightscout.androidaps.plugins.configBuilder;
|
|
||||||
|
|
||||||
import junit.framework.Assert;
|
|
||||||
|
|
||||||
import org.junit.Before;
|
|
||||||
import org.junit.Ignore;
|
|
||||||
import org.junit.Test;
|
|
||||||
import org.junit.runner.RunWith;
|
|
||||||
import org.powermock.core.classloader.annotations.PrepareForTest;
|
|
||||||
import org.powermock.modules.junit4.PowerMockRunner;
|
|
||||||
|
|
||||||
import info.AAPSMocker;
|
|
||||||
import info.nightscout.androidaps.MainApp;
|
|
||||||
import info.nightscout.androidaps.interfaces.PluginType;
|
|
||||||
import info.nightscout.androidaps.utils.SP;
|
|
||||||
|
|
||||||
@RunWith(PowerMockRunner.class)
|
|
||||||
@PrepareForTest({MainApp.class, SP.class})
|
|
||||||
public class ConfigBuilderPluginTest {
|
|
||||||
|
|
||||||
@Test
|
|
||||||
@Ignore
|
|
||||||
public void getPluginTest() {
|
|
||||||
ConfigBuilderPlugin configBuilderPlugin = ConfigBuilderPlugin.getPlugin();
|
|
||||||
Assert.assertNotNull(configBuilderPlugin);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
@Ignore
|
|
||||||
public void onStartTest() {
|
|
||||||
ConfigBuilderPlugin configBuilderPlugin = ConfigBuilderPlugin.getPlugin();
|
|
||||||
configBuilderPlugin.setPluginEnabled(PluginType.GENERAL, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
@Ignore
|
|
||||||
public void onStopTest() {
|
|
||||||
ConfigBuilderPlugin configBuilderPlugin = ConfigBuilderPlugin.getPlugin();
|
|
||||||
configBuilderPlugin.setPluginEnabled(PluginType.GENERAL, true);
|
|
||||||
configBuilderPlugin.setPluginEnabled(PluginType.GENERAL, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Before
|
|
||||||
public void prepareMock() {
|
|
||||||
AAPSMocker.mockMainApp();
|
|
||||||
AAPSMocker.mockApplicationContext();
|
|
||||||
AAPSMocker.mockSP();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
|
@ -0,0 +1,60 @@
|
||||||
|
package info.nightscout.androidaps.plugins.configBuilder
|
||||||
|
|
||||||
|
import dagger.Lazy
|
||||||
|
import dagger.android.AndroidInjector
|
||||||
|
import dagger.android.HasAndroidInjector
|
||||||
|
import info.TestBase
|
||||||
|
import info.nightscout.androidaps.interfaces.CommandQueueProvider
|
||||||
|
import info.nightscout.androidaps.logging.AAPSLogger
|
||||||
|
import info.nightscout.androidaps.plugins.bus.RxBusWrapper
|
||||||
|
import info.nightscout.androidaps.plugins.insulin.InsulinOrefRapidActingPlugin
|
||||||
|
import info.nightscout.androidaps.plugins.profile.local.LocalProfilePlugin
|
||||||
|
import info.nightscout.androidaps.plugins.profile.ns.NSProfilePlugin
|
||||||
|
import info.nightscout.androidaps.plugins.pump.virtual.VirtualPumpPlugin
|
||||||
|
import info.nightscout.androidaps.plugins.sensitivity.SensitivityOref0Plugin
|
||||||
|
import info.nightscout.androidaps.plugins.sensitivity.SensitivityOref1Plugin
|
||||||
|
import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin
|
||||||
|
import info.nightscout.androidaps.utils.resources.ResourceHelper
|
||||||
|
import info.nightscout.androidaps.utils.sharedPreferences.SP
|
||||||
|
import org.junit.Before
|
||||||
|
import org.junit.Test
|
||||||
|
import org.junit.runner.RunWith
|
||||||
|
import org.mockito.Mock
|
||||||
|
import org.powermock.core.classloader.annotations.PrepareForTest
|
||||||
|
import org.powermock.modules.junit4.PowerMockRunner
|
||||||
|
|
||||||
|
@RunWith(PowerMockRunner::class)
|
||||||
|
@PrepareForTest(NSProfilePlugin::class)
|
||||||
|
class ConfigBuilderPluginTest : TestBase() {
|
||||||
|
|
||||||
|
@Mock lateinit var insulinOrefRapidActingPlugin: Lazy<InsulinOrefRapidActingPlugin>
|
||||||
|
@Mock lateinit var localProfilePlugin: Lazy<LocalProfilePlugin>
|
||||||
|
@Mock lateinit var virtualPumpPlugin: Lazy<VirtualPumpPlugin>
|
||||||
|
@Mock lateinit var treatmentsPlugin: Lazy<TreatmentsPlugin>
|
||||||
|
@Mock lateinit var sensitivityOref0Plugin: Lazy<SensitivityOref0Plugin>
|
||||||
|
@Mock lateinit var sensitivityOref1Plugin: Lazy<SensitivityOref1Plugin>
|
||||||
|
|
||||||
|
@Mock lateinit var sp: SP
|
||||||
|
@Mock lateinit var aapsLogger: AAPSLogger
|
||||||
|
@Mock lateinit var resourceHelper: ResourceHelper
|
||||||
|
@Mock lateinit var commandQueue: CommandQueueProvider
|
||||||
|
@Mock lateinit var nsProfilePlugin: NSProfilePlugin
|
||||||
|
|
||||||
|
lateinit var configBuilderPlugin: ConfigBuilderPlugin
|
||||||
|
|
||||||
|
val injector = HasAndroidInjector {
|
||||||
|
AndroidInjector {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun dummy() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Before
|
||||||
|
fun prepareMock() {
|
||||||
|
configBuilderPlugin = ConfigBuilderPlugin(insulinOrefRapidActingPlugin, localProfilePlugin, virtualPumpPlugin, treatmentsPlugin, sensitivityOref0Plugin, sensitivityOref1Plugin, injector, sp, RxBusWrapper(), aapsLogger, resourceHelper, commandQueue, nsProfilePlugin)
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,217 +0,0 @@
|
||||||
package info.nightscout.androidaps.queue;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
|
|
||||||
import junit.framework.Assert;
|
|
||||||
|
|
||||||
import org.json.JSONException;
|
|
||||||
import org.json.JSONObject;
|
|
||||||
import org.junit.Test;
|
|
||||||
import org.junit.runner.RunWith;
|
|
||||||
import org.powermock.api.mockito.PowerMockito;
|
|
||||||
import org.powermock.core.classloader.annotations.PrepareForTest;
|
|
||||||
import org.powermock.modules.junit4.PowerMockRunner;
|
|
||||||
|
|
||||||
import java.util.Date;
|
|
||||||
|
|
||||||
import info.AAPSMocker;
|
|
||||||
import info.nightscout.androidaps.Constants;
|
|
||||||
import info.nightscout.androidaps.MainApp;
|
|
||||||
import info.nightscout.androidaps.plugins.configBuilder.ConstraintChecker;
|
|
||||||
import info.nightscout.androidaps.data.DetailedBolusInfo;
|
|
||||||
import info.nightscout.androidaps.data.Profile;
|
|
||||||
import info.nightscout.androidaps.interfaces.Constraint;
|
|
||||||
import info.nightscout.androidaps.interfaces.PumpInterface;
|
|
||||||
import info.nightscout.androidaps.plugins.configBuilder.ConfigBuilderPlugin;
|
|
||||||
import info.nightscout.androidaps.plugins.pump.virtual.VirtualPumpPlugin;
|
|
||||||
import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin;
|
|
||||||
import info.nightscout.androidaps.queue.commands.Command;
|
|
||||||
import info.nightscout.androidaps.utils.ToastUtils;
|
|
||||||
|
|
||||||
import static info.nightscout.androidaps.utils.DateUtil.now;
|
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
|
||||||
import static org.mockito.Mockito.mock;
|
|
||||||
import static org.mockito.Mockito.when;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Created by mike on 14.01.2018.
|
|
||||||
*/
|
|
||||||
|
|
||||||
@RunWith(PowerMockRunner.class)
|
|
||||||
@PrepareForTest({MainApp.class, ConfigBuilderPlugin.class, ToastUtils.class, Context.class, TreatmentsPlugin.class})
|
|
||||||
public class CommandQueueTest extends CommandQueue {
|
|
||||||
|
|
||||||
String validProfile = "{\"dia\":\"3\",\"carbratio\":[{\"time\":\"00:00\",\"value\":\"30\"}],\"carbs_hr\":\"20\",\"delay\":\"20\",\"sens\":[{\"time\":\"00:00\",\"value\":\"100\"},{\"time\":\"2:00\",\"value\":\"110\"}],\"timezone\":\"UTC\",\"basal\":[{\"time\":\"00:00\",\"value\":\"0.1\"}],\"target_low\":[{\"time\":\"00:00\",\"value\":\"4\"}],\"target_high\":[{\"time\":\"00:00\",\"value\":\"5\"}],\"startDate\":\"1970-01-01T00:00:00.000Z\",\"units\":\"mmol\"}";
|
|
||||||
Profile profile = new Profile(new JSONObject(validProfile), Constants.MGDL);
|
|
||||||
|
|
||||||
public CommandQueueTest() throws JSONException {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void doTests() throws Exception {
|
|
||||||
prepareMock(0d, 0);
|
|
||||||
|
|
||||||
// start with empty queue
|
|
||||||
Assert.assertEquals(0, size());
|
|
||||||
|
|
||||||
// add bolus command
|
|
||||||
bolus(new DetailedBolusInfo(), null);
|
|
||||||
Assert.assertEquals(1, size());
|
|
||||||
|
|
||||||
// add READSTATUS
|
|
||||||
readStatus("anyString", null);
|
|
||||||
Assert.assertEquals(2, size());
|
|
||||||
|
|
||||||
// adding another bolus should remove the first one (size still == 2)
|
|
||||||
bolus(new DetailedBolusInfo(), null);
|
|
||||||
Assert.assertEquals(2, size());
|
|
||||||
|
|
||||||
// clear the queue should reset size
|
|
||||||
clear();
|
|
||||||
Assert.assertEquals(0, size());
|
|
||||||
|
|
||||||
// add tempbasal
|
|
||||||
tempBasalAbsolute(0, 30, true, profile, null);
|
|
||||||
Assert.assertEquals(1, size());
|
|
||||||
|
|
||||||
// add tempbasal percent. it should replace previous TEMPBASAL
|
|
||||||
tempBasalPercent(0, 30, true, profile, null);
|
|
||||||
Assert.assertEquals(1, size());
|
|
||||||
|
|
||||||
// add extended bolus
|
|
||||||
extendedBolus(1, 30, null);
|
|
||||||
Assert.assertEquals(2, size());
|
|
||||||
|
|
||||||
// add cancel temp basal should remove previous 2 temp basal setting
|
|
||||||
extendedBolus(1, 30, null);
|
|
||||||
Assert.assertEquals(2, size());
|
|
||||||
|
|
||||||
// cancel extended bolus should replace previous extended
|
|
||||||
extendedBolus(1, 30, null);
|
|
||||||
Assert.assertEquals(2, size());
|
|
||||||
|
|
||||||
// add setProfile
|
|
||||||
setProfile(profile, null);
|
|
||||||
Assert.assertEquals(3, size());
|
|
||||||
|
|
||||||
// add loadHistory
|
|
||||||
loadHistory((byte) 0, null);
|
|
||||||
Assert.assertEquals(4, size());
|
|
||||||
|
|
||||||
// add loadEvents
|
|
||||||
loadEvents(null);
|
|
||||||
Assert.assertEquals(5, size());
|
|
||||||
|
|
||||||
clear();
|
|
||||||
tempBasalAbsolute(0, 30, true, profile, null);
|
|
||||||
pickup();
|
|
||||||
Assert.assertEquals(0, size());
|
|
||||||
Assert.assertNotNull(performing);
|
|
||||||
Assert.assertEquals(Command.CommandType.TEMPBASAL, performing.commandType);
|
|
||||||
resetPerforming();
|
|
||||||
Assert.assertNull(performing);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void prepareMock(Double insulin, Integer carbs) throws Exception {
|
|
||||||
PowerMockito.mockStatic(ConstraintChecker.class);
|
|
||||||
ConstraintChecker constraintChecker = mock(ConstraintChecker.class);
|
|
||||||
|
|
||||||
AAPSMocker.mockMainApp();
|
|
||||||
AAPSMocker.mockConfigBuilder();
|
|
||||||
PumpInterface pump = VirtualPumpPlugin.getPlugin();
|
|
||||||
when(ConfigBuilderPlugin.getPlugin().getActivePump()).thenReturn(pump);
|
|
||||||
|
|
||||||
when(ConstraintChecker.getInstance()).thenReturn(constraintChecker);
|
|
||||||
when(MainApp.isEngineeringModeOrRelease()).thenReturn(true);
|
|
||||||
Constraint<Double> bolusConstraint = new Constraint<>(0d);
|
|
||||||
when(ConstraintChecker.getInstance().applyBolusConstraints(any())).thenReturn(bolusConstraint);
|
|
||||||
when(ConstraintChecker.getInstance().applyExtendedBolusConstraints(any())).thenReturn(bolusConstraint);
|
|
||||||
Constraint<Integer> carbsConstraint = new Constraint<>(0);
|
|
||||||
when(ConstraintChecker.getInstance().applyCarbsConstraints(any())).thenReturn(carbsConstraint);
|
|
||||||
Constraint<Double> rateConstraint = new Constraint<>(0d);
|
|
||||||
when(ConstraintChecker.getInstance().applyBasalConstraints(any(), any())).thenReturn(rateConstraint);
|
|
||||||
Constraint<Integer> percentageConstraint = new Constraint<>(0);
|
|
||||||
when(ConstraintChecker.getInstance().applyBasalPercentConstraints(any(), any())).thenReturn(percentageConstraint);
|
|
||||||
|
|
||||||
PowerMockito.mockStatic(ToastUtils.class);
|
|
||||||
Context context = mock(Context.class);
|
|
||||||
String message = null;
|
|
||||||
PowerMockito.doNothing().when(ToastUtils.class, "showToastInUiThread", context, message);
|
|
||||||
|
|
||||||
when(MainApp.gs(0)).thenReturn("");
|
|
||||||
|
|
||||||
PowerMockito.mockStatic(TreatmentsPlugin.class);
|
|
||||||
TreatmentsPlugin treatmentsPlugin = mock(TreatmentsPlugin.class);
|
|
||||||
when(TreatmentsPlugin.getPlugin()).thenReturn(treatmentsPlugin);
|
|
||||||
when(treatmentsPlugin.getLastBolusTime()).thenReturn(new Date(100, 0,1 ).getTime());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected synchronized void notifyAboutNewCommand() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void showBolusProgressDialog(Double insulin, Context context) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isThisProfileSet(Profile profile) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void callingCancelAllBolusesClearsQueue() throws Exception {
|
|
||||||
// given
|
|
||||||
prepareMock(0d, 0);
|
|
||||||
Assert.assertEquals(0, size());
|
|
||||||
|
|
||||||
DetailedBolusInfo smb = new DetailedBolusInfo();
|
|
||||||
smb.lastKnownBolusTime = now();
|
|
||||||
smb.isSMB = true;
|
|
||||||
bolus(smb, null);
|
|
||||||
|
|
||||||
bolus(new DetailedBolusInfo(), null);
|
|
||||||
Assert.assertEquals(2, size());
|
|
||||||
|
|
||||||
// when
|
|
||||||
cancelAllBoluses();
|
|
||||||
|
|
||||||
// then
|
|
||||||
Assert.assertEquals(0, size());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void smbIsRejectedIfABolusIsQueued() throws Exception {
|
|
||||||
// given
|
|
||||||
prepareMock(0d, 0);
|
|
||||||
Assert.assertEquals(0, size());
|
|
||||||
|
|
||||||
// when
|
|
||||||
bolus(new DetailedBolusInfo(), null);
|
|
||||||
|
|
||||||
DetailedBolusInfo smb = new DetailedBolusInfo();
|
|
||||||
smb.isSMB = true;
|
|
||||||
boolean queued = bolus(smb, null);
|
|
||||||
|
|
||||||
// then
|
|
||||||
Assert.assertFalse(queued);
|
|
||||||
Assert.assertEquals(size(), 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void smbIsRejectedIfLastKnownBolusIsOutdated() throws Exception {
|
|
||||||
// given
|
|
||||||
prepareMock(0d, 0);
|
|
||||||
Assert.assertEquals(0, size());
|
|
||||||
|
|
||||||
// when
|
|
||||||
DetailedBolusInfo bolus = new DetailedBolusInfo();
|
|
||||||
bolus.isSMB = true;
|
|
||||||
bolus.lastKnownBolusTime = 0;
|
|
||||||
boolean queued = bolus(bolus, null);
|
|
||||||
|
|
||||||
// then
|
|
||||||
Assert.assertFalse(queued);
|
|
||||||
Assert.assertEquals(size(), 0);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,198 @@
|
||||||
|
package info.nightscout.androidaps.queue
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import dagger.Lazy
|
||||||
|
import dagger.android.AndroidInjector
|
||||||
|
import dagger.android.HasAndroidInjector
|
||||||
|
import info.TestBase
|
||||||
|
import info.nightscout.androidaps.data.DetailedBolusInfo
|
||||||
|
import info.nightscout.androidaps.interfaces.ActivePluginProvider
|
||||||
|
import info.nightscout.androidaps.interfaces.Constraint
|
||||||
|
import info.nightscout.androidaps.interfaces.PumpDescription
|
||||||
|
import info.nightscout.androidaps.logging.AAPSLogger
|
||||||
|
import info.nightscout.androidaps.plugins.bus.RxBusWrapper
|
||||||
|
import info.nightscout.androidaps.plugins.configBuilder.ConstraintChecker
|
||||||
|
import info.nightscout.androidaps.plugins.configBuilder.ProfileFunction
|
||||||
|
import info.nightscout.androidaps.plugins.pump.virtual.VirtualPumpPlugin
|
||||||
|
import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin
|
||||||
|
import info.nightscout.androidaps.queue.commands.Command
|
||||||
|
import info.nightscout.androidaps.utils.DateUtil
|
||||||
|
import info.nightscout.androidaps.utils.ToastUtils
|
||||||
|
import info.nightscout.androidaps.utils.resources.ResourceHelper
|
||||||
|
import info.nightscout.androidaps.utils.sharedPreferences.SP
|
||||||
|
import org.junit.Assert
|
||||||
|
import org.junit.Before
|
||||||
|
import org.junit.Test
|
||||||
|
import org.junit.runner.RunWith
|
||||||
|
import org.mockito.Mock
|
||||||
|
import org.mockito.Mockito.`when`
|
||||||
|
import org.powermock.core.classloader.annotations.PrepareForTest
|
||||||
|
import org.powermock.modules.junit4.PowerMockRunner
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
|
@RunWith(PowerMockRunner::class)
|
||||||
|
@PrepareForTest(ConstraintChecker::class, VirtualPumpPlugin::class, ToastUtils::class, Context::class, TreatmentsPlugin::class)
|
||||||
|
class CommandQueueTest : TestBase() {
|
||||||
|
|
||||||
|
@Mock lateinit var aapsLogger: AAPSLogger
|
||||||
|
@Mock lateinit var resourceHelper: ResourceHelper
|
||||||
|
@Mock lateinit var constraintChecker: ConstraintChecker
|
||||||
|
@Mock lateinit var profileFunction: ProfileFunction
|
||||||
|
@Mock lateinit var lazyActivePlugin: Lazy<ActivePluginProvider>
|
||||||
|
@Mock lateinit var activePlugin: ActivePluginProvider
|
||||||
|
@Mock lateinit var context: Context
|
||||||
|
@Mock lateinit var treatmentsPlugin: TreatmentsPlugin
|
||||||
|
@Mock lateinit var virtualPumpPlugin: VirtualPumpPlugin
|
||||||
|
@Mock lateinit var sp: SP
|
||||||
|
val rxBus = RxBusWrapper()
|
||||||
|
|
||||||
|
val injector = HasAndroidInjector {
|
||||||
|
AndroidInjector {
|
||||||
|
if (it is Command) {
|
||||||
|
it.aapsLogger = aapsLogger
|
||||||
|
it.resourceHelper = resourceHelper
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
lateinit var commandQueue: CommandQueue
|
||||||
|
|
||||||
|
@Before
|
||||||
|
fun prepareMock() {
|
||||||
|
commandQueue = CommandQueue(injector, aapsLogger, rxBus, resourceHelper, constraintChecker, profileFunction, lazyActivePlugin, context, sp)
|
||||||
|
|
||||||
|
val pumpDescription = PumpDescription()
|
||||||
|
pumpDescription.basalMinimumRate = 0.1
|
||||||
|
|
||||||
|
`when`(lazyActivePlugin.get()).thenReturn(activePlugin)
|
||||||
|
`when`(activePlugin.activePump).thenReturn(virtualPumpPlugin)
|
||||||
|
`when`(virtualPumpPlugin.pumpDescription).thenReturn(pumpDescription)
|
||||||
|
`when`(virtualPumpPlugin.isThisProfileSet(anyObject())).thenReturn(false)
|
||||||
|
`when`(activePlugin.activeTreatments).thenReturn(treatmentsPlugin)
|
||||||
|
`when`(treatmentsPlugin.lastBolusTime).thenReturn(Date(100, 0, 1).time)
|
||||||
|
`when`(profileFunction.getProfile()).thenReturn(validProfile)
|
||||||
|
|
||||||
|
val bolusConstraint = Constraint(0.0)
|
||||||
|
`when`(constraintChecker.applyBolusConstraints(anyObject())).thenReturn(bolusConstraint)
|
||||||
|
`when`(constraintChecker.applyExtendedBolusConstraints(anyObject())).thenReturn(bolusConstraint)
|
||||||
|
val carbsConstraint = Constraint(0)
|
||||||
|
`when`(constraintChecker.applyCarbsConstraints(anyObject())).thenReturn(carbsConstraint)
|
||||||
|
val rateConstraint = Constraint(0.0)
|
||||||
|
`when`(constraintChecker.applyBasalConstraints(anyObject(), anyObject())).thenReturn(rateConstraint)
|
||||||
|
val percentageConstraint = Constraint(0)
|
||||||
|
`when`(constraintChecker.applyBasalPercentConstraints(anyObject(), anyObject())).thenReturn(percentageConstraint)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun doTests() {
|
||||||
|
|
||||||
|
// start with empty queue
|
||||||
|
Assert.assertEquals(0, commandQueue.size())
|
||||||
|
|
||||||
|
// add bolus command
|
||||||
|
commandQueue.bolus(DetailedBolusInfo(), null)
|
||||||
|
Assert.assertEquals(1, commandQueue.size())
|
||||||
|
|
||||||
|
// add READSTATUS
|
||||||
|
commandQueue.readStatus("anyString", null)
|
||||||
|
Assert.assertEquals(2, commandQueue.size())
|
||||||
|
|
||||||
|
// adding another bolus should remove the first one (size still == 2)
|
||||||
|
commandQueue.bolus(DetailedBolusInfo(), null)
|
||||||
|
Assert.assertEquals(2, commandQueue.size())
|
||||||
|
|
||||||
|
// clear the queue should reset size
|
||||||
|
commandQueue.clear()
|
||||||
|
Assert.assertEquals(0, commandQueue.size())
|
||||||
|
|
||||||
|
// add tempbasal
|
||||||
|
commandQueue.tempBasalAbsolute(0.0, 30, true, validProfile, null)
|
||||||
|
Assert.assertEquals(1, commandQueue.size())
|
||||||
|
|
||||||
|
// add tempbasal percent. it should replace previous TEMPBASAL
|
||||||
|
commandQueue.tempBasalPercent(0, 30, true, validProfile, null)
|
||||||
|
Assert.assertEquals(1, commandQueue.size())
|
||||||
|
|
||||||
|
// add extended bolus
|
||||||
|
commandQueue.extendedBolus(1.0, 30, null)
|
||||||
|
Assert.assertEquals(2, commandQueue.size())
|
||||||
|
|
||||||
|
// add cancel temp basal should remove previous 2 temp basal setting
|
||||||
|
commandQueue.extendedBolus(1.0, 30, null)
|
||||||
|
Assert.assertEquals(2, commandQueue.size())
|
||||||
|
|
||||||
|
// cancel extended bolus should replace previous extended
|
||||||
|
commandQueue.extendedBolus(1.0, 30, null)
|
||||||
|
Assert.assertEquals(2, commandQueue.size())
|
||||||
|
|
||||||
|
// add setProfile
|
||||||
|
commandQueue.setProfile(validProfile, null)
|
||||||
|
Assert.assertEquals(3, commandQueue.size())
|
||||||
|
|
||||||
|
// add loadHistory
|
||||||
|
commandQueue.loadHistory(0.toByte(), null)
|
||||||
|
Assert.assertEquals(4, commandQueue.size())
|
||||||
|
|
||||||
|
// add loadEvents
|
||||||
|
commandQueue.loadEvents(null)
|
||||||
|
Assert.assertEquals(5, commandQueue.size())
|
||||||
|
commandQueue.clear()
|
||||||
|
commandQueue.tempBasalAbsolute(0.0, 30, true, validProfile, null)
|
||||||
|
commandQueue.pickup()
|
||||||
|
Assert.assertEquals(0, commandQueue.size())
|
||||||
|
Assert.assertNotNull(commandQueue.performing)
|
||||||
|
Assert.assertEquals(Command.CommandType.TEMPBASAL, commandQueue.performing?.commandType)
|
||||||
|
commandQueue.resetPerforming()
|
||||||
|
Assert.assertNull(commandQueue.performing)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun callingCancelAllBolusesClearsQueue() {
|
||||||
|
// given
|
||||||
|
Assert.assertEquals(0, commandQueue.size())
|
||||||
|
val smb = DetailedBolusInfo()
|
||||||
|
smb.lastKnownBolusTime = DateUtil.now()
|
||||||
|
smb.isSMB = true
|
||||||
|
commandQueue.bolus(smb, null)
|
||||||
|
commandQueue.bolus(DetailedBolusInfo(), null)
|
||||||
|
Assert.assertEquals(2, commandQueue.size())
|
||||||
|
|
||||||
|
// when
|
||||||
|
commandQueue.cancelAllBoluses()
|
||||||
|
|
||||||
|
// then
|
||||||
|
Assert.assertEquals(0, commandQueue.size())
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun smbIsRejectedIfABolusIsQueued() {
|
||||||
|
// given
|
||||||
|
Assert.assertEquals(0, commandQueue.size())
|
||||||
|
|
||||||
|
// when
|
||||||
|
commandQueue.bolus(DetailedBolusInfo(), null)
|
||||||
|
val smb = DetailedBolusInfo()
|
||||||
|
smb.isSMB = true
|
||||||
|
val queued: Boolean = commandQueue.bolus(smb, null)
|
||||||
|
|
||||||
|
// then
|
||||||
|
Assert.assertFalse(queued)
|
||||||
|
Assert.assertEquals(commandQueue.size(), 1)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun smbIsRejectedIfLastKnownBolusIsOutdated() {
|
||||||
|
// given
|
||||||
|
Assert.assertEquals(0, commandQueue.size())
|
||||||
|
|
||||||
|
// when
|
||||||
|
val bolus = DetailedBolusInfo()
|
||||||
|
bolus.isSMB = true
|
||||||
|
bolus.lastKnownBolusTime = 0
|
||||||
|
val queued: Boolean = commandQueue.bolus(bolus, null)
|
||||||
|
|
||||||
|
// then
|
||||||
|
Assert.assertFalse(queued)
|
||||||
|
Assert.assertEquals(commandQueue.size(), 0)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue