Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add some unit test and CommandSdFileWrite old firmware support. #7

Open
wants to merge 32 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
4cd0331
add Unit Test for Utility Class.
Amka78 Sep 3, 2018
c40a101
add offset unit test to getUnsignedInt32
Amka78 Sep 10, 2018
e35cadc
add mock dependency
Amka78 Sep 11, 2018
b58bcae
update gradle ver
Amka78 Sep 11, 2018
4ae513a
add CommandTimeSync class unit test
Amka78 Sep 11, 2018
39de744
Add CommandTimeoutTest
Amka78 Sep 14, 2018
74561c8
Add CommandProfileLoadTest
Amka78 Sep 14, 2018
fb345e8
Delete Unneccesary import
Amka78 Sep 14, 2018
bd1b9ad
Add Profile Test
Amka78 Sep 22, 2018
675bf50
Profile unittest finished 100% code coverage.
Amka78 Nov 3, 2018
33d61fa
Add LoggerUnitTest.
Amka78 Nov 6, 2018
a8e143d
Add EventTestUnitTest
Amka78 Nov 6, 2018
f585506
Merge remote-tracking branch 'android-sdk-original/master'
Amka78 Nov 6, 2018
9f32d6a
Update Gradle version.
Amka78 Nov 8, 2018
6769634
Add CommandSdFileWrite UnitTest
Amka78 Nov 8, 2018
95f0798
modify CommandTimeoutTest line coverage 100%
Amka78 Nov 9, 2018
a48a48f
Delete unused mock setting.
Amka78 Nov 9, 2018
137605b
Modify LoggerUnitTest line coverage 100%
Amka78 Nov 10, 2018
bea1320
Add cofirm getCommandString.
Amka78 Nov 10, 2018
89b6b40
Fixed setErrorFailed when error message is null
Amka78 Nov 10, 2018
814497f
Add CommandSdFileReadTest
Amka78 Nov 10, 2018
65bd933
Add CommandResponseParserTest
Amka78 Nov 10, 2018
5c353b2
Add CommandProfileUnloadTest
Amka78 Nov 10, 2018
edb740c
Add CommandProcessorTest
Amka78 Nov 10, 2018
bb73241
Modify can set mock parser.
Amka78 Nov 11, 2018
d646628
Modify CommandProcessor Line coverage is 100%
Amka78 Nov 11, 2018
a6ae703
Modify CommandSdFileWrite line & method coverage 100%
Amka78 Nov 17, 2018
3d814bf
Add AuroraBleScannerUnitTest
Amka78 Nov 17, 2018
d8fe222
Modify CommandSdlFileRead line coverage 100 %
Amka78 Nov 17, 2018
2ca0870
if aurora firmware is old, write sd file crc check disabled
Amka78 Dec 4, 2018
438581d
Build tools version updated.
Amka78 Dec 4, 2018
0a5ea77
Update aurora sdk version
Amka78 Dec 4, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ apply plugin: 'com.android.application'

android {
compileSdkVersion 27
buildToolsVersion '27.0.3'
buildToolsVersion '28.0.3'
defaultConfig {
minSdkVersion 21
targetSdkVersion 27
Expand Down
4 changes: 3 additions & 1 deletion aurorasdk/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ apply plugin: 'com.android.library'

android {
compileSdkVersion 27
buildToolsVersion '27.0.3'
buildToolsVersion '28.0.3'

defaultConfig {
minSdkVersion 21
Expand Down Expand Up @@ -41,4 +41,6 @@ dependencies {
implementation 'com.github.markrileybot.heatshrink:heatshrink-java:0.1.1'
api 'no.nordicsemi.android:ble:1.2.0'
testImplementation 'junit:junit:4.12'
testImplementation 'org.powermock:powermock-module-junit4:1.7.4'
testImplementation 'org.powermock:powermock-api-mockito2:1.7.4'
}
2 changes: 1 addition & 1 deletion aurorasdk/publish.gradle
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
apply plugin: 'maven-publish'
apply plugin: 'com.jfrog.bintray'

version '1.0.2'
version '1.0.5'
group 'com.iwinks'

publishing {
Expand Down
3 changes: 2 additions & 1 deletion aurorasdk/src/main/java/com/aurorasdk/Command.java
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,8 @@ public void setError(int errorCode, String errorMessage) {

this.errorCode = errorCode;

if (!errorMessage.isEmpty()){
if (errorMessage != null
&& !errorMessage.isEmpty()){

this.errorMessage = errorMessage;

Expand Down
8 changes: 7 additions & 1 deletion aurorasdk/src/main/java/com/aurorasdk/CommandProcessor.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ public enum CommandState {
private Queue<Command> commandQueue = new ConcurrentLinkedQueue<>();
private Command currentCommand;

private final CommandResponseParser commandResponseParser = new CommandResponseParser();
private CommandResponseParser commandResponseParser = new CommandResponseParser();

public interface CommandExecutor {
void executeCommand(Command command);
Expand Down Expand Up @@ -50,6 +50,12 @@ public interface CommandInputWriter {
reset();
}

CommandProcessor(CommandExecutor commandExecutor, CommandInputWriter commandInputWriter, CommandResponseParser parser){

this(commandExecutor, commandInputWriter);
this.commandResponseParser = parser;
}

void queueCommand(Command command){

commandQueue.add(command);
Expand Down
15 changes: 13 additions & 2 deletions aurorasdk/src/main/java/com/aurorasdk/CommandSdFileWrite.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ public class CommandSdFileWrite extends Command {
private long crc;
private boolean renameIfExisting;
private ByteArrayOutputStream compressedInput;
private long osVersion = 30000;

public CommandSdFileWrite(String destination, String input, boolean renameIfExisting) {

Expand Down Expand Up @@ -51,6 +52,11 @@ public CommandSdFileWrite(String destination, String input){
this(destination, input, false);
}

public CommandSdFileWrite(String destination, String input, boolean renameIfExisting, long osVersion){
this(destination, input, renameIfExisting);
this.osVersion = osVersion;
}

@Override
protected boolean shouldRetry() {

Expand All @@ -65,7 +71,7 @@ protected void retry() {
setInput();
}

private void setInput(){
protected void setInput(){

try {
setInput(compressedInput.toByteArray());
Expand All @@ -81,6 +87,11 @@ private void setInput(){
@Override
public String getCommandString() {

return "sd-file-write " + destination + " / " + (renameIfExisting ? "1" : "0") + " 1 1500 1 " + crc;
String commandString = "sd-file-write " + destination + " / " + (renameIfExisting ? "1" : "0") + " 1 1500 1 ";
if(osVersion < 30000) {
return commandString;
} else {
return commandString + crc;
}
}
}
106 changes: 106 additions & 0 deletions aurorasdk/src/test/java/com/aurorasdk/AuroraBleScannerTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
package com.aurorasdk;

import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothManager;
import android.bluetooth.le.BluetoothLeScanner;
import android.bluetooth.le.ScanFilter;
import android.bluetooth.le.ScanSettings;
import android.content.Context;
import android.support.v4.content.ContextCompat;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

@RunWith(PowerMockRunner.class)
@PrepareForTest({android.os.Process.class, ContextCompat.class, android.os.ParcelUuid.class, AuroraBleScanner.class})
public class AuroraBleScannerTest {

private Context context = null;

private BluetoothManager blManager = null;

private AuroraBleScanner.ScanListener listener = null;

@Before
public void setTest() {
context = PowerMockito.mock(Context.class);
blManager = PowerMockito.mock(BluetoothManager.class);
PowerMockito.when(context.getSystemService(Context.BLUETOOTH_SERVICE)).thenReturn(blManager);
listener = PowerMockito.mock(AuroraBleScanner.ScanListener.class);
PowerMockito.mockStatic(android.os.Process.class);
}

@Test
public void startScan_NoHasPermissionsDueToAdapterNull() {

AuroraBleScanner scanner = new AuroraBleScanner(context, listener);
scanner.startScan();
scanner.stopScan();
scanner.getResults();
}

@Test
public void startScan_NoHasPermissionsDueToAdapterIsNotEnabled() {

BluetoothAdapter adapter = PowerMockito.mock(BluetoothAdapter.class);
PowerMockito.when(adapter.isEnabled()).thenReturn(false);
PowerMockito.when(blManager.getAdapter()).thenReturn(adapter);

AuroraBleScanner scanner = new AuroraBleScanner(context, listener);
scanner.startScan();
}

@Test
public void startScan_NoHasPermissionsDueToHasNotLocationPermissions() throws Exception {

BluetoothAdapter adapter = PowerMockito.mock(BluetoothAdapter.class);

PowerMockito.when(adapter.isEnabled()).thenReturn(true);
PowerMockito.when(blManager.getAdapter()).thenReturn(adapter);

AuroraBleScanner scanner = new AuroraBleScanner(context, listener);

PowerMockito.mockStatic(ContextCompat.class);
PowerMockito.when(ContextCompat.checkSelfPermission(Mockito.any(), Mockito.any())).thenReturn(12);
scanner.startScan();
}

@Test
public void startScan_isCorrectWork() throws Exception {
BluetoothAdapter adapter = PowerMockito.mock(BluetoothAdapter.class);
BluetoothLeScanner mockScanner = PowerMockito.mock(BluetoothLeScanner.class);
PowerMockito.when(adapter.getBluetoothLeScanner()).thenReturn(mockScanner);
PowerMockito.mockStatic(android.os.ParcelUuid.class);
PowerMockito.when(android.os.ParcelUuid.fromString(Mockito.any())).thenReturn(null);
PowerMockito.when(adapter.isEnabled()).thenReturn(true);
PowerMockito.when(blManager.getAdapter()).thenReturn(adapter);
CreateScanFilterMock();
CreateScanSettingMock();
AuroraBleScanner scanner = new AuroraBleScanner(context, listener);

scanner.startScan();
scanner.stopScan();
}

private void CreateScanSettingMock() throws Exception {
ScanSettings.Builder mockBuilder = PowerMockito.mock(ScanSettings.Builder.class);
ScanSettings mockScanSettings = PowerMockito.mock(ScanSettings.class);
PowerMockito.when(mockBuilder.build()).thenReturn(mockScanSettings);
PowerMockito.when(mockBuilder.setScanMode(Mockito.anyInt())).thenReturn(mockBuilder);
PowerMockito.whenNew(ScanSettings.Builder.class).withNoArguments().thenReturn(mockBuilder);
}

private void CreateScanFilterMock() throws Exception {
ScanFilter.Builder mockBuilder = PowerMockito.mock(ScanFilter.Builder.class);
ScanFilter mockScanFilter = PowerMockito.mock(ScanFilter.class);
PowerMockito.when(mockBuilder.build()).thenReturn(mockScanFilter);
PowerMockito.when(mockBuilder.setServiceUuid(Mockito.any())).thenReturn(mockBuilder);
PowerMockito.whenNew(ScanFilter.Builder.class).withNoArguments().thenReturn(mockBuilder);
}

}
122 changes: 122 additions & 0 deletions aurorasdk/src/test/java/com/aurorasdk/CommandProcessorTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
package com.aurorasdk;
import android.os.Looper;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import org.mockito.stubbing.OngoingStubbing;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

import java.io.IOException;

import static org.mockito.ArgumentMatchers.any;

@RunWith(PowerMockRunner.class)
@PrepareForTest({android.util.Log.class})
public class CommandProcessorTest {

CommandProcessor.CommandExecutor executor = PowerMockito.mock(CommandProcessor.CommandExecutor.class);
CommandProcessor.CommandInputWriter writer = PowerMockito.mock(CommandProcessor.CommandInputWriter.class);
CommandProcessor processor = new CommandProcessor(executor, writer);

@Before
public void setTest(){
processor.reset();
}

@Test
public void queueCommand_isCorrectWork() {

processor.queueCommand(new CommandTimeSync());
}

@Test
public void setIdleCommandState() {
processor.queueCommand(new CommandTimeSync());
processor.setCommandState(CommandProcessor.CommandState.IDlE, 10);
}

@Test
public void setIdleCommandStateWhenPendingCommandExist() {
processor.queueCommand(new CommandTimeSync());
processor.setCommandState(CommandProcessor.CommandState.RESPONSE_TABLE_READY);

processor.setCommandState(CommandProcessor.CommandState.IDlE);
}

@Test
public void setInputRequestedCommand() {

PowerMockito.mockStatic(android.util.Log.class);

processor.queueCommand(new CommandSdFileWrite("testPath", "testValue"));
processor.setCommandState(CommandProcessor.CommandState.INPUT_REQUESTED, 10);
}

@Test
public void processCommandResponseLine_SucceedParsing() {

processor.queueCommand(new CommandTimeSync());

processor.setCommandState(CommandProcessor.CommandState.RESPONSE_OBJECT_READY);
processor.setCommandState(CommandProcessor.CommandState.IDlE);

processor.processCommandResponseLine("test:value1");
}

@Test
public void processCommandResponseLine_FailedParsingLine() {

processor.queueCommand(new CommandTimeSync());
processor.setCommandState(CommandProcessor.CommandState.RESPONSE_OBJECT_READY);

processor.processCommandResponseLine("test");
}

@Test
public void processCommandResponseLine_FailedParsingTable() {

processor.queueCommand(new CommandTimeSync());
processor.setCommandState(CommandProcessor.CommandState.RESPONSE_TABLE_READY);

processor.processCommandResponseLine("Col1|Col2");
processor.setCommandState(CommandProcessor.CommandState.RESPONSE_TABLE_READY);
processor.processCommandResponseLine("Test");
}

@Test
public void processCommandResponse_NotResponseReadyState() {
processor.queueCommand(new CommandTimeSync());
processor.setCommandState(CommandProcessor.CommandState.EXECUTE);
processor.processCommandResponseLine("Col1|Col2");
}

@Test
public void processCommandOutput_isCorrectWork() {
processor.queueCommand(new CommandTimeSync());
processor.processCommandOutput("data".getBytes());
}

@Test
public void processCommandOutput_IOException() throws IOException {

CommandResponseParser parser = PowerMockito.mock(CommandResponseParser.class);
PowerMockito.doThrow(new IOException()).when(parser).parseOutput(Mockito.any());

CommandProcessor localProc = new CommandProcessor(
PowerMockito.mock(CommandProcessor.CommandExecutor.class),
PowerMockito.mock(CommandProcessor.CommandInputWriter.class),
parser);
localProc.queueCommand((new CommandTimeSync()));
localProc.processCommandOutput(null);
}




}
11 changes: 11 additions & 0 deletions aurorasdk/src/test/java/com/aurorasdk/CommandProfileLoadTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.aurorasdk;
import org.junit.Test;
import static org.junit.Assert.*;
public class CommandProfileLoadTest {
@Test
public void getCommandString_isCorrect() {
CommandProfileLoad profileLoad = new CommandProfileLoad("test");

assertEquals("prof-load test", profileLoad.getCommandString());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package com.aurorasdk;
import android.os.Looper;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import org.mockito.stubbing.OngoingStubbing;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

import java.util.logging.Handler;

@RunWith(PowerMockRunner.class)
@PrepareForTest({Logger.class, android.os.Looper.class, android.os.Handler.class})
public class CommandProfileUnloadTest {

@Test(expected = RuntimeException.class)
public void CommnadProfileUnload_isCorrectWork() {
CommandProfileUnload command = new CommandProfileUnload();

PowerMockito.mockStatic(android.os.Looper.class);

android.os.Handler mockHandler = PowerMockito.mock(android.os.Handler.class);
PowerMockito.spy(mockHandler.postDelayed(Mockito.any(), Mockito.anyLong()));
command.completeCommand();
}
}
Loading