summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorcon <qtc-committer@nokia.com>2009-07-29 17:17:17 +0200
committercon <qtc-committer@nokia.com>2009-07-29 18:11:04 +0200
commit2c1b85f05cd7735d6de3b6b332a1e5ffb22942a4 (patch)
treebdfd533de5f32cd5e43dffc39d7e3f8f929a7952 /tests
parentc430649768260d341dc261b086f2c6913ac8496a (diff)
downloadqt-creator-2c1b85f05cd7735d6de3b6b332a1e5ffb22942a4.tar.gz
Copy and install file prior to running it.
Diffstat (limited to 'tests')
-rw-r--r--tests/manual/trk/launcher.cpp94
-rw-r--r--tests/manual/trk/trkutils.cpp8
-rw-r--r--tests/manual/trk/trkutils.h10
3 files changed, 103 insertions, 9 deletions
diff --git a/tests/manual/trk/launcher.cpp b/tests/manual/trk/launcher.cpp
index a83985a084..8111a58a30 100644
--- a/tests/manual/trk/launcher.cpp
+++ b/tests/manual/trk/launcher.cpp
@@ -33,6 +33,7 @@
#include <QtCore/QFile>
#include <QtCore/QQueue>
#include <QtCore/QTimer>
+#include <QtCore/QDateTime>
#include <QtNetwork/QTcpServer>
#include <QtNetwork/QTcpSocket>
@@ -88,6 +89,8 @@ public:
~Adapter();
void setTrkServerName(const QString &name) { m_trkServerName = name; }
void setFileName(const QString &name) { m_fileName = name; }
+ void setCopyFileName(const QString &srcName, const QString &dstName) { m_copySrcFileName = srcName; m_copyDstFileName = dstName; }
+ void setInstallFileName(const QString &name) { m_installFileName = name; }
bool startServer();
private:
@@ -128,6 +131,8 @@ private:
void timerEvent(QTimerEvent *ev);
byte nextTrkWriteToken();
+ void handleFileCreation(const TrkResult &result);
+ void handleFileCreated(const TrkResult &result);
void handleCpuType(const TrkResult &result);
void handleCreateProcess(const TrkResult &result);
void handleWaitForFinished(const TrkResult &result);
@@ -136,6 +141,10 @@ private:
void handleAndReportCreateProcess(const TrkResult &result);
void handleResult(const TrkResult &data);
+
+ void copyFileToRemote();
+ void installRemotePackageSilently(const QString &filename);
+ void installAndRun();
void startInferiorIfNeeded();
#if USE_NATIVE
@@ -158,6 +167,9 @@ private:
Session m_session; // global-ish data (process id, target information)
QString m_fileName;
+ QString m_copySrcFileName;
+ QString m_copyDstFileName;
+ QString m_installFileName;
};
Adapter::Adapter()
@@ -198,11 +210,22 @@ bool Adapter::startServer()
sendTrkMessage(TrkSupported, CB(handleSupportMask));
sendTrkMessage(TrkCpuType, CB(handleCpuType));
sendTrkMessage(TrkVersions); // Versions
-// sendTrkMessage(0x09); // Unrecognized command
- startInferiorIfNeeded();
+ if (!m_copySrcFileName.isEmpty() && !m_copyDstFileName.isEmpty())
+ copyFileToRemote();
+ else
+ installAndRun();
return true;
}
+void Adapter::installAndRun()
+{
+ if (!m_installFileName.isEmpty()) {
+ installRemotePackageSilently(m_installFileName);
+ startInferiorIfNeeded();
+ } else {
+ startInferiorIfNeeded();
+ }
+}
void Adapter::logMessage(const QString &msg)
{
qDebug() << "ADAPTER: " << qPrintable(msg);
@@ -508,6 +531,38 @@ void Adapter::handleResult(const TrkResult &result)
}
}
+void Adapter::handleFileCreation(const TrkResult &result)
+{
+ // we don't do any error handling yet, which is bad
+ const char *data = result.data.data();
+ uint copyFileHandle = extractInt(data + 2);
+ qDebug() << copyFileHandle;
+ QFile file(m_copySrcFileName);
+ file.open(QIODevice::ReadOnly);
+ QByteArray src = file.readAll();
+ file.close();
+ const int BLOCKSIZE = 1024;
+ int size = src.length();
+ int pos = 0;
+ while (pos < size) {
+ QByteArray ba;
+ appendInt(&ba, copyFileHandle, TargetByteOrder);
+ appendString(&ba, src.mid(pos, BLOCKSIZE), TargetByteOrder, false);
+ sendTrkMessage(TrkWriteFile, 0, ba);
+ pos += BLOCKSIZE;
+ }
+ QByteArray ba;
+ appendInt(&ba, copyFileHandle, TargetByteOrder);
+ appendInt(&ba, QDateTime::currentDateTime().toTime_t(), TargetByteOrder);
+ sendTrkMessage(TrkCloseFile, CB(handleFileCreated), ba);
+}
+
+void Adapter::handleFileCreated(const TrkResult &result)
+{
+ Q_UNUSED(result)
+ installAndRun();
+}
+
void Adapter::handleCpuType(const TrkResult &result)
{
logMessage("HANDLE CPU TYPE: " + result.toString());
@@ -618,6 +673,22 @@ void Adapter::cleanUp()
// Error: 0x00
}
+void Adapter::copyFileToRemote()
+{
+ QByteArray ba;
+ appendByte(&ba, 0x10);
+ appendString(&ba, m_copyDstFileName.toLocal8Bit(), TargetByteOrder, false);
+ sendTrkMessage(TrkOpenFile, CB(handleFileCreation), ba);
+}
+
+void Adapter::installRemotePackageSilently(const QString &fileName)
+{
+ QByteArray ba;
+ appendByte(&ba, 'C');
+ appendString(&ba, fileName.toLocal8Bit(), TargetByteOrder, false);
+ sendTrkMessage(TrkInstallFile, 0, ba);
+}
+
void Adapter::startInferiorIfNeeded()
{
if (m_session.pid != 0) {
@@ -635,9 +706,13 @@ void Adapter::startInferiorIfNeeded()
int main(int argc, char *argv[])
{
- if (argc < 3) {
- qDebug() << "Usage: " << argv[0] << "<trkservername> <remotefilename>";
+ if ((argc != 3 && argc != 5 && argc != 6)
+ || (argc == 5 && QString(argv[2]) != "-i")
+ || (argc == 6 && QString(argv[2]) != "-I")) {
+ qDebug() << "Usage: " << argv[0] << "<trk_port_name> [-i remote_sis_file | -I local_sis_file remote_sis_file] <remote_executable_name>";
qDebug() << "for example" << argv[0] << "COM5 C:\\sys\\bin\\test.exe";
+ qDebug() << " " << argv[0] << "COM5 -i C:\\Data\\test_gcce_udeb.sisx C:\\sys\\bin\\test.exe";
+ qDebug() << " " << argv[0] << "COM5 -I C:\\Projects\\test\\test_gcce_udeb.sisx C:\\Data\\test_gcce_udeb.sisx C:\\sys\\bin\\test.exe";
return 1;
}
@@ -649,7 +724,16 @@ int main(int argc, char *argv[])
Adapter adapter;
adapter.setTrkServerName(argv[1]);
- adapter.setFileName(argv[2]);
+ if (argc == 3) {
+ adapter.setFileName(argv[2]);
+ } else if (argc == 5) {
+ adapter.setInstallFileName(argv[3]);
+ adapter.setFileName(argv[4]);
+ } else {
+ adapter.setCopyFileName(argv[3], argv[4]);
+ adapter.setInstallFileName(argv[4]);
+ adapter.setFileName(argv[5]);
+ }
if (adapter.startServer())
return app.exec();
return 4;
diff --git a/tests/manual/trk/trkutils.cpp b/tests/manual/trk/trkutils.cpp
index d29acb535e..1a1c7345ed 100644
--- a/tests/manual/trk/trkutils.cpp
+++ b/tests/manual/trk/trkutils.cpp
@@ -261,13 +261,15 @@ void appendInt(QByteArray *ba, uint i, Endianness endian)
}
}
-void appendString(QByteArray *ba, const QByteArray &str, Endianness endian)
+void appendString(QByteArray *ba, const QByteArray &str, Endianness endian, bool appendNullTerminator)
{
const int n = str.size();
- appendShort(ba, n+1, endian); // count the terminating \0
+ const int fullSize = n + (appendNullTerminator ? 1 : 0);
+ appendShort(ba, fullSize, endian); // count the terminating \0
for (int i = 0; i != n; ++i)
ba->append(str.at(i));
- ba->append('\0');
+ if (appendNullTerminator)
+ ba->append('\0');
}
QByteArray errorMessage(byte code)
diff --git a/tests/manual/trk/trkutils.h b/tests/manual/trk/trkutils.h
index 95b0001330..4e62bb5a24 100644
--- a/tests/manual/trk/trkutils.h
+++ b/tests/manual/trk/trkutils.h
@@ -40,14 +40,22 @@ typedef unsigned char byte;
namespace trk {
enum Command {
+ TrkPing = 0x00,
TrkConnect = 0x01,
TrkVersions = 0x04,
TrkSupported = 0x05,
TrkCpuType = 0x06,
+ TrkHostVersions = 0x09,
TrkContinue = 0x18,
TrkCreateItem = 0x40,
TrkDeleteItem = 0x41,
+ TrkWriteFile = 0x48,
+ TrkOpenFile = 0x4a,
+ TrkCloseFile = 0x4b,
+ TrkInstallFile = 0x4d,
+ TrkInstallFile2 = 0x4e,
+
TrkNotifyAck = 0x80,
TrkNotifyNak = 0xff,
TrkNotifyStopped = 0x90,
@@ -83,7 +91,7 @@ enum Endianness
void appendByte(QByteArray *ba, byte b);
void appendShort(QByteArray *ba, ushort s, Endianness = TargetByteOrder);
void appendInt(QByteArray *ba, uint i, Endianness = TargetByteOrder);
-void appendString(QByteArray *ba, const QByteArray &str, Endianness = TargetByteOrder);
+void appendString(QByteArray *ba, const QByteArray &str, Endianness = TargetByteOrder, bool appendNullTerminator = true);
enum CodeMode
{