aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorJoerg Bornemann <joerg.bornemann@digia.com>2014-07-11 17:19:04 +0200
committerChristian Kandeler <christian.kandeler@digia.com>2014-07-16 09:41:23 +0200
commit5ffdee71e50e9593794e66139baa0c355e0bd88e (patch)
tree2dcdf712bb546a04049c493f81c6fb93d21346ad /tests
parente85876f236ad45b3327b7efefe79430d3972a4cf (diff)
Put a system-wide lock on the build directory.
So that two qbs instances can't overwrite each other's build graphs. In practice, this is probably most relevant for IDEs, as these hold a build graph for potentially long periods of time. Facilitates QLockFile that was introduced in Qt 5.1. For older Qt versions, no locking happens. Task-number: QBS-162 Change-Id: Ib598617fb1742eb57b6a017f40b9631d1d54e627 Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/api/testdata/buildgraph-locking/project.qbs4
-rw-r--r--tests/auto/api/tst_api.cpp31
-rw-r--r--tests/auto/api/tst_api.h1
3 files changed, 35 insertions, 1 deletions
diff --git a/tests/auto/api/testdata/buildgraph-locking/project.qbs b/tests/auto/api/testdata/buildgraph-locking/project.qbs
new file mode 100644
index 000000000..e08b008bc
--- /dev/null
+++ b/tests/auto/api/testdata/buildgraph-locking/project.qbs
@@ -0,0 +1,4 @@
+import qbs
+
+Project {
+}
diff --git a/tests/auto/api/tst_api.cpp b/tests/auto/api/tst_api.cpp
index 73e9bb1b6..db0fc4d41 100644
--- a/tests/auto/api/tst_api.cpp
+++ b/tests/auto/api/tst_api.cpp
@@ -120,6 +120,25 @@ void printProjectData(const qbs::ProjectData &project)
}
}
+
+void TestApi::buildGraphLocking()
+{
+ qbs::SetupProjectParameters setupParams = defaultSetupParameters();
+ const QString projectDirPath = QDir::cleanPath(m_workingDataDir + "/buildgraph-locking");
+ setupParams.setProjectFilePath(projectDirPath + "/project.qbs");
+ QScopedPointer<qbs::SetupProjectJob> setupJob(qbs::Project::setupProject(setupParams,
+ m_logSink, 0));
+ waitForFinished(setupJob.data());
+ QVERIFY2(!setupJob->error().hasError(), qPrintable(setupJob->error().toString()));
+ const qbs::Project project = setupJob->project();
+ Q_UNUSED(project);
+ setupJob.reset(qbs::Project::setupProject(setupParams, m_logSink, 0));
+ waitForFinished(setupJob.data());
+ QVERIFY(setupJob->error().hasError());
+ QVERIFY2(setupJob->error().toString().contains("lock"),
+ qPrintable(setupJob->error().toString()));
+}
+
void TestApi::buildSingleFile()
{
qbs::SetupProjectParameters setupParams = defaultSetupParameters();
@@ -330,6 +349,8 @@ void TestApi::changeContent()
// Now check whether the data updates were done correctly.
projectData = project.projectData();
+ buildJob.reset(0);
+ project = qbs::Project();
job.reset(qbs::Project::setupProject(setupParams, m_logSink, 0));
waitForFinished(job.data());
QVERIFY2(!job->error().hasError(), qPrintable(job->error().toString()));
@@ -373,6 +394,9 @@ void TestApi::changeContent()
// Add a file to the top level of a product that does not have a "files" binding yet.
setupParams.setProjectFilePath(QDir::cleanPath(m_workingDataDir +
"/project-editing/project-with-no-files.qbs"));
+
+ buildJob.reset(0);
+ project = qbs::Project();
job.reset(qbs::Project::setupProject(setupParams, m_logSink, 0));
waitForFinished(job.data());
QVERIFY2(!job->error().hasError(), qPrintable(job->error().toString()));
@@ -390,6 +414,8 @@ void TestApi::changeContent()
waitForFinished(buildJob.data());
QVERIFY2(!buildJob->error().hasError(), qPrintable(buildJob->error().toString()));
QVERIFY(rcvr.descriptions.contains("compiling main.cpp"));
+ buildJob.reset(0);
+ project = qbs::Project();
job.reset(qbs::Project::setupProject(setupParams, m_logSink, 0));
waitForFinished(job.data());
QVERIFY2(!job->error().hasError(), qPrintable(job->error().toString()));
@@ -532,6 +558,7 @@ void TestApi::installableFiles()
setupParams.setProjectFilePath(QDir::cleanPath(QLatin1String(SRCDIR "/../blackbox/testdata"
"/recursive_wildcards/recursive_wildcards.qbs")));
+ project = qbs::Project();
job.reset(qbs::Project::setupProject(setupParams, m_logSink, 0));
waitForFinished(job.data());
QVERIFY2(!job->error().hasError(), qPrintable(job->error().toString()));
@@ -611,7 +638,7 @@ void TestApi::multiArch()
m_logSink, 0));
waitForFinished(setupJob.data());
QVERIFY2(!setupJob->error().hasError(), qPrintable(setupJob->error().toString()));
- const qbs::Project &project = setupJob->project();
+ qbs::Project project = setupJob->project();
QCOMPARE(project.profile(), QLatin1String("qbs_autotests"));
const QList<qbs::ProductData> &products = project.projectData().products();
QCOMPARE(products.count(), 3);
@@ -653,6 +680,8 @@ void TestApi::multiArch()
// Error check: Try to build for the same profile twice.
overriddenValues.insert("project.targetProfile", hostProfile.name());
setupParams.setOverriddenValues(overriddenValues);
+ project = qbs::Project();
+ buildJob.reset(0);
setupJob.reset(qbs::Project::setupProject(setupParams, m_logSink, 0));
waitForFinished(setupJob.data());
QVERIFY(setupJob->error().hasError());
diff --git a/tests/auto/api/tst_api.h b/tests/auto/api/tst_api.h
index 7d1157512..5e75218ba 100644
--- a/tests/auto/api/tst_api.h
+++ b/tests/auto/api/tst_api.h
@@ -47,6 +47,7 @@ public:
private slots:
void initTestCase();
+ void buildGraphLocking();
void buildSingleFile();
void changeContent();
void disabledInstallGroup();