From ef311beb1a8fccb97d30c0ea96905b3448dff807 Mon Sep 17 00:00:00 2001 From: felmer <felmer> Date: Wed, 14 Nov 2012 13:35:43 +0000 Subject: [PATCH] SP-367, BIS-242: MultiThreadSampleOptimisticLockingTest.testRegisterContainedSamplesForSameSampleInTwoThreads() introduced SVN: 27621 --- ...ultiThreadSampleOptimisticLockingTest.java | 63 ++++++++++++++++++- .../optimistic_locking/ToolBox.java | 8 +++ 2 files changed, 68 insertions(+), 3 deletions(-) diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/optimistic_locking/MultiThreadSampleOptimisticLockingTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/optimistic_locking/MultiThreadSampleOptimisticLockingTest.java index bcbde898c6d..16e1abc69bc 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/optimistic_locking/MultiThreadSampleOptimisticLockingTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/optimistic_locking/MultiThreadSampleOptimisticLockingTest.java @@ -47,14 +47,14 @@ public class MultiThreadSampleOptimisticLockingTest extends MultiThreadOptimisti MultiThreadSampleOptimisticLockingTest.class); @Test - public void testRegisterSamplesForSameSampleInTwoThreads() + public void testRegisterChildSamplesForSameSampleInTwoThreads() { final Sample sample = toolBox.createAndLoadSample(1, null); final MessageChannel messageChannelMain = - new MessageChannelBuilder(10000).name("data sets for samples main") + new MessageChannelBuilder(10000).name("child samples for samples main") .logger(operationLog).getChannel(); final MessageChannel messageChannelSecond = - new MessageChannelBuilder(10000).name("data sets for samples second") + new MessageChannelBuilder(10000).name("child samples for samples second") .logger(operationLog).getChannel(); final IServiceConversationProgressListener listener = new AbstractServiceConversationProgressListener(operationLog) @@ -102,6 +102,63 @@ public class MultiThreadSampleOptimisticLockingTest extends MultiThreadOptimisti } + @Test + public void testRegisterContainedSamplesForSameSampleInTwoThreads() + { + final Sample sample = toolBox.createAndLoadSample(1, null); + final MessageChannel messageChannelMain = + new MessageChannelBuilder(10000).name("contained samples for samples main") + .logger(operationLog).getChannel(); + final MessageChannel messageChannelSecond = + new MessageChannelBuilder(10000).name("contained samples for samples second") + .logger(operationLog).getChannel(); + final IServiceConversationProgressListener listener = + new AbstractServiceConversationProgressListener(operationLog) + { + @Override + public void handleProgress(String phaseName, int totalItemsToProcess, + int numItemsProcessed) + { + if (phaseName.equals("createContainerSamples") + && numItemsProcessed == 1 && totalItemsToProcess == 2) + { + messageChannelMain.send(ToolBox.FIRST_REGISTERED); + } + } + }; + TimeIntervalChecker timeIntervalChecker = new TimeIntervalChecker(); + new Thread(new Runnable() + { + @Override + public void run() + { + messageChannelMain.assertNextMessage(ToolBox.FIRST_REGISTERED); + AtomicEntityOperationDetails details = + new AtomicEntityOperationDetailsBuilder().user("test") + .sample(toolBox.sampleComponent(13, sample)).getDetails(); + etlService.performEntityOperations(systemSessionToken, details); + messageChannelSecond.send(ToolBox.REGISTERED); + } + }).start(); + ServiceConversationsThreadContext.setProgressListener(listener); + AtomicEntityOperationDetailsBuilder builder = new AtomicEntityOperationDetailsBuilder(); + builder.user(ToolBox.USER_ID).batchSize(1); + builder.sample(toolBox.sampleComponent(11, sample)); + builder.sample(toolBox.sampleComponent(12, sample)); + + etlService.performEntityOperations(systemSessionToken, builder.getDetails()); + messageChannelSecond.assertNextMessage(ToolBox.REGISTERED); + + Sample loadedSample = toolBox.loadSample(sample); + List<Sample> samples = + etlService.listSamples(systemSessionToken, + ListSampleCriteria.createForContainer(new TechId(loadedSample))); + assertEquals("[OLT-S1:OLT-S11, OLT-S1:OLT-S12, OLT-S1:OLT-S13]", + toolBox.extractCodes(samples).toString()); + toolBox.checkModifierAndModificationDateOfBean(timeIntervalChecker, loadedSample, "test"); + + } + @Test public void testRegisterDataSetsForSameSampleInTwoThreads() { diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/optimistic_locking/ToolBox.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/optimistic_locking/ToolBox.java index 7b33e0e8a09..a9efbfbef3b 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/optimistic_locking/ToolBox.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/optimistic_locking/ToolBox.java @@ -327,6 +327,14 @@ public class ToolBox return sample; } + public NewSample sampleComponent(int number, IIdentifierHolder sampleContainer, + IEntityProperty... properties) + { + NewSample sample = sample(number, properties); + sample.setContainerIdentifier(sampleContainer.getIdentifier()); + return sample; + } + public NewSample sample(int number, IEntityProperty... properties) { NewSample sample = new NewSample(); -- GitLab