Refactor: Now expected serial is stated in the test for added clarity.

This commit is contained in:
Samuel Carlsson 2014-03-20 17:22:05 +01:00
parent 1ff8504e3d
commit 59cc2e9d1e
6 changed files with 72 additions and 24 deletions

View File

@ -4,4 +4,6 @@ package se.vidstige.jadb.server;
* Created by vidstige on 20/03/14. * Created by vidstige on 20/03/14.
*/ */
public interface AdbDeviceResponder { public interface AdbDeviceResponder {
String getSerial();
String getType();
} }

View File

@ -8,11 +8,13 @@ import java.net.Socket;
import java.nio.charset.Charset; import java.nio.charset.Charset;
public class AdbProtocolHandler implements Runnable { public class AdbProtocolHandler implements Runnable {
private Socket socket; private final Socket socket;
private final AdbResponder responder;
public AdbProtocolHandler(Socket socket) { public AdbProtocolHandler(Socket socket, AdbResponder responder) {
this.socket = socket; this.socket = socket;
} this.responder = responder;
}
@Override @Override
public void run() public void run()
@ -28,34 +30,33 @@ public class AdbProtocolHandler implements Runnable {
byte[] buffer = new byte[4]; byte[] buffer = new byte[4];
input.readFully(buffer); input.readFully(buffer);
String encodedLength = new String(buffer, Charset.forName("utf-8")); String encodedLength = new String(buffer, Charset.forName("utf-8"));
System.out.println("DEBUG: " + encodedLength);
int length = Integer.parseInt(encodedLength, 16); int length = Integer.parseInt(encodedLength, 16);
buffer = new byte[length]; buffer = new byte[length];
input.readFully(buffer); input.readFully(buffer);
String command = new String(buffer, Charset.forName("utf-8")); String command = new String(buffer, Charset.forName("utf-8"));
System.out.println("Command: " + command);
responder.onCommand(command);
if ("host:version".equals(command)) { if ("host:version".equals(command)) {
output.write("OKAY"); output.write("OKAY");
send(output, "001F"); // version. required to be 31 send(output, String.format("%04x", responder.getVersion()));
System.out.println("OK");
} }
else if ("host:transport-any".equals(command)) else if ("host:transport-any".equals(command))
{ {
output.write("OKAY"); output.write("OKAY");
System.out.println("OK");
} }
else if ("host:devices".equals(command)) { else if ("host:devices".equals(command)) {
output.write("OKAY"); output.write("OKAY");
send(output, "X\tdevice\nY\tdevice"); for (AdbDeviceResponder d : responder.getDevices())
System.out.println("OK"); {
send(output, d.getSerial() + "\t" + d.getType() + "\n");
}
} }
else else
{ {
output.write("FAIL"); output.write("FAIL");
send(output, "Unknown command: " + command); send(output, "Unknown command: " + command);
System.out.println("FAIL");
} }
output.flush(); output.flush();
} }

View File

@ -1,7 +1,14 @@
package se.vidstige.jadb.server; package se.vidstige.jadb.server;
import java.util.List;
/** /**
* Created by vidstige on 20/03/14. * Created by vidstige on 20/03/14.
*/ */
public interface AdbResponder { public interface AdbResponder {
void onCommand(String command);
int getVersion();
List<AdbDeviceResponder> getDevices();
} }

View File

@ -8,24 +8,20 @@ import java.net.Socket;
public class AdbServer extends SocketServer { public class AdbServer extends SocketServer {
public static final int DEFAULT_PORT = 15037; public static final int DEFAULT_PORT = 15037;
private AdbResponder responder;
public AdbServer() public AdbServer(AdbResponder responder)
{ {
this(DEFAULT_PORT); this(responder, DEFAULT_PORT);
} }
public AdbServer(int port) { public AdbServer(AdbResponder responder, int port) {
super(port); super(port);
this.responder = responder;
} }
@Override @Override
protected Runnable createResponder(Socket socket) { protected Runnable createResponder(Socket socket) {
return new AdbProtocolHandler(socket); return new AdbProtocolHandler(socket, responder);
}
public static void main(String[] args)
{
SocketServer server = new AdbServer();
server.run();
} }
} }

View File

@ -32,7 +32,8 @@ public class MockedTestCases {
@Test @Test
public void testListDevices() throws Exception { public void testListDevices() throws Exception {
server.add("serial-123");
List<JadbDevice> devices = connection.getDevices(); List<JadbDevice> devices = connection.getDevices();
Assert.assertEquals("X", devices.get(0).getSerial()); Assert.assertEquals("serial-123", devices.get(0).getSerial());
} }
} }

View File

@ -5,15 +5,18 @@ import se.vidstige.jadb.server.AdbResponder;
import se.vidstige.jadb.server.AdbServer; import se.vidstige.jadb.server.AdbServer;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/** /**
* Created by vidstige on 2014-03-20. * Created by vidstige on 2014-03-20.
*/ */
public class FakeAdbServer implements AdbResponder, AdbDeviceResponder { public class FakeAdbServer implements AdbResponder {
private final AdbServer server; private final AdbServer server;
private List<AdbDeviceResponder> devices = new ArrayList<AdbDeviceResponder>();
public FakeAdbServer(int port) { public FakeAdbServer(int port) {
server = new AdbServer(port); server = new AdbServer(this, port);
} }
@ -24,4 +27,42 @@ public class FakeAdbServer implements AdbResponder, AdbDeviceResponder {
public void stop() throws IOException, InterruptedException { public void stop() throws IOException, InterruptedException {
server.stop(); server.stop();
} }
@Override
public void onCommand(String command) {
System.out.println("command: " +command);
}
@Override
public int getVersion() {
return 31;
}
public void add(String serial)
{
devices.add(new DeviceResponder(serial));
}
@Override
public List<AdbDeviceResponder> getDevices() {
return devices;
}
private static class DeviceResponder implements AdbDeviceResponder {
private final String serial;
private DeviceResponder(String serial) {
this.serial = serial;
}
@Override
public String getSerial() {
return serial;
}
@Override
public String getType() {
return "device";
}
}
} }