Просмотр исходного кода

Merge commit '00f4f6b' into fixRetrieveTests

Steve Pieper лет назад: 13
Родитель
Сommit
7dffacf3c1

+ 1 - 1
CMakeExternals/DCMTK.cmake

@@ -23,7 +23,7 @@ if(${add_project})
   if(CTK_SUPERBUILD)
 
     if(NOT DEFINED DCMTK_DIR)
-      set(revision_tag ae3b946f6e6231)
+      set(revision_tag ab844899a92f46e2d880c38c85ce098933533aef)
       if(${proj}_REVISION_TAG)
         set(revision_tag ${${proj}_REVISION_TAG})
       endif()

+ 9 - 0
Libs/DICOM/Core/Testing/Cpp/ctkDICOMRetrieveTest2.cpp

@@ -44,6 +44,7 @@ int ctkDICOMRetrieveTest2( int argc, char * argv [] )
   QCoreApplication app(argc, argv);
 
   ctkDICOMTester tester;
+  std::cerr << "ctkDICOMRetrieveTest2: Starting dcmqrscp\n";
   tester.startDCMQRSCP();
   
   QStringList arguments = app.arguments();
@@ -54,16 +55,19 @@ int ctkDICOMRetrieveTest2( int argc, char * argv [] )
     ctkDICOMRetrieveTest2PrintUsage();
     return EXIT_FAILURE;
     }
+  std::cerr << "ctkDICOMRetrieveTest2: Storing data to dcmqrscp\n";
   tester.storeData(arguments);
 
   ctkDICOMDatabase queryDatabase;
 
+  std::cerr << "ctkDICOMRetrieveTest2: Setting up query\n";
   ctkDICOMQuery query;
   query.setCallingAETitle("CTK_AE");
   query.setCalledAETitle("CTK_AE");
   query.setHost("localhost");
   query.setPort(tester.dcmqrscpPort());
 
+  std::cerr << "ctkDICOMRetrieveTest2: Running query\n";
   bool res = query.query(queryDatabase);
   if (!res)
     {
@@ -77,6 +81,7 @@ int ctkDICOMRetrieveTest2( int argc, char * argv [] )
     return EXIT_FAILURE;
     }
 
+  std::cerr << "ctkDICOMRetrieveTest2: Setting up retrieve database\n";
   QSharedPointer<ctkDICOMDatabase> retrieveDatabase(new ctkDICOMDatabase);
   retrieveDatabase->openDatabase( "./ctkDICOM.sql" );
 
@@ -89,8 +94,10 @@ int ctkDICOMRetrieveTest2( int argc, char * argv [] )
 
   retrieve.setDatabase(retrieveDatabase);
 
+  std::cerr << "ctkDICOMRetrieveTest2: Retrieving\n";
   foreach(const QString& study, query.studyInstanceUIDQueried())
     {
+    std::cerr << "ctkDICOMRetrieveTest2: Retrieving " << study.toStdString() << "\n";
     bool res = retrieve.moveStudy(study);
     if (!res)
       {
@@ -101,5 +108,7 @@ int ctkDICOMRetrieveTest2( int argc, char * argv [] )
       }
     }
 
+  std::cerr << "ctkDICOMRetrieveTest2: Exit success\n";
+
   return EXIT_SUCCESS;
 }

+ 50 - 1
Libs/DICOM/Core/ctkDICOMTester.cpp

@@ -48,13 +48,17 @@ public:
   QString findDCMQRSCPExecutable()const;
   QString findDCMQRSCPConfigFile()const;
   QString findStoreSCUExecutable()const;
+  QString findStoreSCPExecutable()const;
   void printProcessOutputs(const QString& program, QProcess* process)const;
   
   QProcess*   DCMQRSCPProcess;
+  QProcess*   STORESCPProcess;
   QString     DCMQRSCPExecutable;
   QString     DCMQRSCPConfigFile;
   int         DCMQRSCPPort;
+  int         STORESCPPort;
   QString     StoreSCUExecutable;
+  QString     StoreSCPExecutable;
 };
 
 //------------------------------------------------------------------------------
@@ -63,17 +67,42 @@ public:
 //------------------------------------------------------------------------------
 ctkDICOMTesterPrivate::ctkDICOMTesterPrivate(ctkDICOMTester& o): q_ptr(&o)
 {
+  Q_Q(ctkDICOMTester);
+
   this->DCMQRSCPProcess = 0;
   this->DCMQRSCPExecutable = this->findDCMQRSCPExecutable();
   this->DCMQRSCPConfigFile = this->findDCMQRSCPConfigFile();
   this->DCMQRSCPPort = 11112;
+  this->STORESCPPort = 11113;
   this->StoreSCUExecutable = this->findStoreSCUExecutable();
+  this->StoreSCPExecutable = this->findStoreSCPExecutable();
+
+  // Start the storescp process and keep it active as long as this
+  // class exists
+  this->STORESCPProcess = new QProcess(q);
+  // usage of storescp:
+  //  storescp 11113
+  QStringList storescpArgs;
+  storescpArgs << QString::number(this->STORESCPPort);
+  
+  this->STORESCPProcess->start(this->StoreSCPExecutable, storescpArgs);
 }
 
 //------------------------------------------------------------------------------
 ctkDICOMTesterPrivate::~ctkDICOMTesterPrivate()
 {
-  delete this->DCMQRSCPProcess;
+  this->STORESCPProcess->terminate();
+  if (!this->STORESCPProcess->waitForFinished())
+    {
+    this->STORESCPProcess->kill();
+    }
+  this->STORESCPProcess = 0;
+
+  delete this->STORESCPProcess;
+  if (this->DCMQRSCPProcess)
+    {
+    delete this->DCMQRSCPProcess;
+    }
   this->DCMQRSCPProcess = 0;
 }
 
@@ -121,6 +150,12 @@ QString ctkDICOMTesterPrivate::findStoreSCUExecutable()const
 }
 
 //------------------------------------------------------------------------------
+QString ctkDICOMTesterPrivate::findStoreSCPExecutable()const
+{
+  return this->findFile(QStringList("storescp*"), "CMakeExternals/Install/bin");  
+}
+
+//------------------------------------------------------------------------------
 void ctkDICOMTesterPrivate::printProcessOutputs(const QString& program, QProcess* process)const
 {
   QTextStream out(stdout);
@@ -210,6 +245,20 @@ QString ctkDICOMTester::storeSCUExecutable()const
 }
 
 //------------------------------------------------------------------------------
+void ctkDICOMTester::setStoreSCPExecutable(const QString& storeSCP)
+{
+  Q_D(ctkDICOMTester);
+  d->StoreSCPExecutable = storeSCP;
+}
+
+//------------------------------------------------------------------------------
+QString ctkDICOMTester::storeSCPExecutable()const
+{
+  Q_D(const ctkDICOMTester);
+  return d->StoreSCPExecutable;
+}
+
+//------------------------------------------------------------------------------
 void ctkDICOMTester::setDCMQRSCPPort(int port)
 {
   Q_D(ctkDICOMTester);

+ 4 - 0
Libs/DICOM/Core/ctkDICOMTester.h

@@ -42,6 +42,7 @@ class CTK_DICOM_CORE_EXPORT ctkDICOMTester : public QObject
   Q_PROPERTY(QString dcmqrscpExecutable READ dcmqrscpExecutable WRITE setDCMQRSCPExecutable)
   Q_PROPERTY(QString dcmqrscpConfigFile READ dcmqrscpConfigFile WRITE setDCMQRSCPConfigFile)
   Q_PROPERTY(QString storeSCUExecutable READ storeSCUExecutable WRITE setStoreSCUExecutable)
+  Q_PROPERTY(QString storeSCPExecutable READ storeSCPExecutable WRITE setStoreSCPExecutable)
   Q_PROPERTY(int dcmqrscpPort READ dcmqrscpPort WRITE setDCMQRSCPPort)
 public:
   ctkDICOMTester(QObject* parent = 0);
@@ -57,6 +58,9 @@ public:
   void setStoreSCUExecutable(const QString& storescu);
   QString storeSCUExecutable()const;
 
+  void setStoreSCPExecutable(const QString& storescp);
+  QString storeSCPExecutable()const;
+
   ///  Port number [0,65365] where the dcmqrscp and storescu communicate.
   /// Changing the port won't change the port of any running process.
   /// You must stop and restart any process you want to have its port changed