use of org.opencastproject.assetmanager.api.query.AQueryBuilder in project opencast by opencast.
the class SchedulerServiceImplTest method testTransactionCleanup.
@Test
public void testTransactionCleanup() throws Exception {
Date start = new Date();
Date end = new Date(System.currentTimeMillis() + 60000);
String captureDeviceID = "demo";
String seriesId = "series1";
Set<String> userIds = new HashSet<>();
userIds.add("user1");
userIds.add("user2");
MediaPackage mp = generateEvent(Opt.<String>none());
mp.setSeries(seriesId);
DublinCoreCatalog event = generateEvent(captureDeviceID, start, end);
addDublinCore(Opt.<String>none(), mp, event);
Map<String, String> caProperties = generateCaptureAgentMetadata("demo");
SchedulerTransaction trx = schedSvc.createTransaction("new");
assertEquals("new", trx.getSource());
AQueryBuilder query = assetManager.createQuery();
AResult result = query.select(query.snapshot(), query.properties()).where(query.organizationId().eq(new DefaultOrganization().getId()).and(query.mediaPackageId(mp.getIdentifier().compact()))).run();
Opt<ARecord> record = result.getRecords().head();
assertFalse(record.isSome());
trx.addEvent(start, end, captureDeviceID, userIds, mp, wfPropertiesUpdated, caProperties, Opt.<Boolean>none());
query = assetManager.createQuery();
result = query.select(query.snapshot(), query.properties()).where(query.organizationId().eq(new DefaultOrganization().getId()).and(query.mediaPackageId(mp.getIdentifier().compact()))).run();
record = result.getRecords().head();
assertTrue(record.isSome());
schedSvc.transactionOffsetMillis = 0;
schedSvc.cleanupTransactions();
query = assetManager.createQuery();
result = query.select(query.snapshot(), query.properties()).where(query.organizationId().eq(new DefaultOrganization().getId()).and(query.mediaPackageId(mp.getIdentifier().compact()))).run();
record = result.getRecords().head();
assertFalse(record.isSome());
try {
schedSvc.getTransaction(trx.getId());
fail("Deleted transaction found!");
} catch (NotFoundException e) {
assertNotNull(e);
}
}
use of org.opencastproject.assetmanager.api.query.AQueryBuilder in project opencast by opencast.
the class SchedulerServiceImplTest method testTransactionRollback.
@Test
public void testTransactionRollback() throws Exception {
Date start = new Date();
Date end = new Date(System.currentTimeMillis() + 60000);
String captureDeviceID = "demo";
String seriesId = "series1";
Set<String> userIds = new HashSet<>();
userIds.add("user1");
userIds.add("user2");
MediaPackage mp = generateEvent(Opt.<String>none());
mp.setSeries(seriesId);
DublinCoreCatalog event = generateEvent(captureDeviceID, start, end);
addDublinCore(Opt.<String>none(), mp, event);
Map<String, String> caProperties = generateCaptureAgentMetadata("demo");
try {
schedSvc.addEvent(start, end, captureDeviceID, userIds, mp, wfPropertiesUpdated, caProperties, Opt.<Boolean>none(), Opt.some(SchedulerService.ORIGIN), SchedulerService.ORIGIN);
} catch (SchedulerTransactionLockException e) {
fail("Unable to add event!");
}
SchedulerTransaction trx = schedSvc.createTransaction("new");
assertEquals("new", trx.getSource());
AQueryBuilder query = assetManager.createQuery();
AResult result = query.select(query.snapshot(), query.properties()).where(query.organizationId().eq(new DefaultOrganization().getId()).and(query.mediaPackageId(mp.getIdentifier().compact()))).run();
assertEquals(1, result.getSize());
trx.addEvent(start, end, captureDeviceID, userIds, mp, wfPropertiesUpdated, caProperties, Opt.<Boolean>none());
query = assetManager.createQuery();
result = query.select(query.snapshot(), query.properties()).where(query.organizationId().eq(new DefaultOrganization().getId()).and(query.mediaPackageId(mp.getIdentifier().compact()))).run();
assertEquals(2, result.getSize());
trx.rollback();
query = assetManager.createQuery();
result = query.select(query.snapshot(), query.properties()).where(query.organizationId().eq(new DefaultOrganization().getId()).and(query.mediaPackageId(mp.getIdentifier().compact()))).run();
assertEquals(1, result.getSize());
try {
schedSvc.getTransaction(trx.getId());
fail("Deleted transaction found!");
} catch (NotFoundException e) {
assertNotNull(e);
}
trx = schedSvc.createTransaction("new");
trx.addEvent(start, end, captureDeviceID, userIds, mp, wfPropertiesUpdated, caProperties, Opt.<Boolean>none());
query = assetManager.createQuery();
result = query.select(query.snapshot(), query.properties()).where(query.organizationId().eq(new DefaultOrganization().getId()).and(query.mediaPackageId(mp.getIdentifier().compact()))).run();
assertEquals(2, result.getSize());
assertEquals(new VersionImpl(2), result.getRecords().tail().head2().getSnapshot().get().getVersion());
assertEquals(new VersionImpl(0), result.getRecords().head2().getSnapshot().get().getVersion());
try {
schedSvc.getMediaPackage(mp.getIdentifier().compact());
} catch (NotFoundException e) {
fail("Detection of second last element doesn't work!");
}
}
use of org.opencastproject.assetmanager.api.query.AQueryBuilder in project opencast by opencast.
the class SchedulerServiceImplTest method testTransactionCommitConflict.
@Test
public void testTransactionCommitConflict() throws Exception {
Date start = new Date();
Date end = new Date(System.currentTimeMillis() + 60000);
String captureDeviceID = "demo";
String seriesId = "series1";
Set<String> userIds = new HashSet<>();
userIds.add("user1");
userIds.add("user2");
MediaPackage mp = generateEvent(Opt.<String>none());
mp.setSeries(seriesId);
DublinCoreCatalog extendedEvent = generateExtendedEvent(Opt.<String>none(), "extended");
addDublinCore(Opt.<String>none(), mp, extendedEvent);
DublinCoreCatalog event = generateEvent(captureDeviceID, start, end);
addDublinCore(Opt.<String>none(), mp, event);
addAcl(Opt.<String>none(), mp, acl);
Map<String, String> caProperties = generateCaptureAgentMetadata("demo");
SchedulerTransaction trx = schedSvc.createTransaction("new");
trx.addEvent(start, end, captureDeviceID, userIds, mp, wfProperties, caProperties, Opt.<Boolean>none());
try {
trx.commit();
} catch (SchedulerConflictException e) {
fail("Pre-conflict detection not working!");
}
AQueryBuilder query = assetManager.createQuery();
AResult result = query.select(query.snapshot(), query.properties()).where(query.organizationId().eq(new DefaultOrganization().getId()).and(query.mediaPackageId(mp.getIdentifier().compact()))).run();
assertEquals(1, result.getSize());
Opt<ARecord> record = result.getRecords().head();
assertTrue(record.isSome());
assertEquals(new VersionImpl(0), record.get().getSnapshot().get().getVersion());
schedSvc.updateEvent(mp.getIdentifier().compact(), Opt.<Date>none(), Opt.<Date>none(), Opt.<String>none(), Opt.<Set<String>>none(), Opt.<MediaPackage>none(), Opt.<Map<String, String>>none(), Opt.<Map<String, String>>none(), Opt.some(Opt.some(true)), SchedulerService.ORIGIN);
// Update with same checksum
trx = schedSvc.createTransaction("new");
trx.addEvent(start, end, captureDeviceID, userIds, mp, wfProperties, caProperties, Opt.some(true));
try {
// works because of same checksum
trx.commit();
} catch (SchedulerConflictException e) {
fail("Pre-conflict detection not working!");
}
query = assetManager.createQuery();
result = query.select(query.snapshot(), query.properties()).where(query.organizationId().eq(new DefaultOrganization().getId()).and(query.mediaPackageId(mp.getIdentifier().compact()))).run();
assertEquals(1, result.getSize());
record = result.getRecords().head();
assertTrue(record.isSome());
assertEquals(new VersionImpl(1), record.get().getSnapshot().get().getVersion());
assertTrue(record.get().getProperties().apply(org.opencastproject.assetmanager.api.fn.Properties.getBoolean("optout")));
assertEquals("new", record.get().getProperties().apply(org.opencastproject.assetmanager.api.fn.Properties.getString("source")));
assertEquals("new", record.get().getProperties().apply(org.opencastproject.assetmanager.api.fn.Properties.getString("last_modified_origin")));
// Update with different checksum
schedSvc.updateEvent(mp.getIdentifier().compact(), Opt.<Date>none(), Opt.<Date>none(), Opt.<String>none(), Opt.<Set<String>>none(), Opt.<MediaPackage>none(), Opt.<Map<String, String>>none(), Opt.<Map<String, String>>none(), Opt.some(Opt.some(false)), SchedulerService.ORIGIN);
query = assetManager.createQuery();
result = query.select(query.snapshot(), query.properties()).where(query.organizationId().eq(new DefaultOrganization().getId()).and(query.mediaPackageId(mp.getIdentifier().compact()))).run();
assertEquals(1, result.getSize());
record = result.getRecords().head();
assertTrue(record.isSome());
assertEquals(new VersionImpl(1), record.get().getSnapshot().get().getVersion());
assertFalse(record.get().getProperties().apply(org.opencastproject.assetmanager.api.fn.Properties.getBoolean("optout")));
assertTrue(record.get().getProperties().apply(org.opencastproject.assetmanager.api.fn.Properties.getStringOpt("checksum")).isSome());
assertEquals("new", record.get().getProperties().apply(org.opencastproject.assetmanager.api.fn.Properties.getString("source")));
assertEquals(SchedulerService.ORIGIN, record.get().getProperties().apply(org.opencastproject.assetmanager.api.fn.Properties.getString("last_modified_origin")));
trx = schedSvc.createTransaction("new");
trx.addEvent(start, end, captureDeviceID, userIds, mp, wfProperties, caProperties, Opt.some(true));
try {
// creates conflict
trx.commit();
} catch (SchedulerConflictException e) {
fail("Pre-conflict detection not working!");
}
query = assetManager.createQuery();
result = query.select(query.snapshot(), query.properties()).where(query.organizationId().eq(new DefaultOrganization().getId()).and(query.mediaPackageId(mp.getIdentifier().compact()))).run();
assertEquals(1, result.getSize());
record = result.getRecords().head();
assertTrue(record.isSome());
assertEquals(new VersionImpl(1), record.get().getSnapshot().get().getVersion());
assertFalse(record.get().getProperties().apply(org.opencastproject.assetmanager.api.fn.Properties.getBoolean("optout")));
assertTrue(record.get().getProperties().apply(org.opencastproject.assetmanager.api.fn.Properties.getStringOpt("last_conflict")).isSome());
assertEquals("new", record.get().getProperties().apply(org.opencastproject.assetmanager.api.fn.Properties.getString("source")));
assertEquals(SchedulerService.ORIGIN, record.get().getProperties().apply(org.opencastproject.assetmanager.api.fn.Properties.getString("last_modified_origin")));
// Commit again with no changes
trx = schedSvc.createTransaction("new");
trx.addEvent(start, end, captureDeviceID, userIds, mp, wfProperties, caProperties, Opt.some(true));
try {
// ignores conflict
trx.commit();
} catch (SchedulerConflictException e) {
fail("Pre-conflict detection not working!");
}
query = assetManager.createQuery();
result = query.select(query.snapshot(), query.properties()).where(query.organizationId().eq(new DefaultOrganization().getId()).and(query.mediaPackageId(mp.getIdentifier().compact()))).run();
assertEquals(1, result.getSize());
record = result.getRecords().head();
assertTrue(record.isSome());
assertEquals(new VersionImpl(1), record.get().getSnapshot().get().getVersion());
assertFalse(record.get().getProperties().apply(org.opencastproject.assetmanager.api.fn.Properties.getBoolean("optout")));
assertTrue(record.get().getProperties().apply(org.opencastproject.assetmanager.api.fn.Properties.getStringOpt("last_conflict")).isSome());
assertEquals("new", record.get().getProperties().apply(org.opencastproject.assetmanager.api.fn.Properties.getString("source")));
assertEquals(SchedulerService.ORIGIN, record.get().getProperties().apply(org.opencastproject.assetmanager.api.fn.Properties.getString("last_modified_origin")));
// Commit again with changes
trx = schedSvc.createTransaction("new");
trx.addEvent(start, end, "newdevice", userIds, mp, wfProperties, caProperties, Opt.some(true));
try {
// override from existing
// creates new conflict
testConflictHandler.setStrategy(Strategy.OLD);
trx.commit();
} catch (SchedulerConflictException e) {
fail("Pre-conflict detection not working!");
}
query = assetManager.createQuery();
result = query.select(query.snapshot(), query.properties()).where(query.organizationId().eq(new DefaultOrganization().getId()).and(query.mediaPackageId(mp.getIdentifier().compact()))).run();
assertEquals(1, result.getSize());
record = result.getRecords().head();
assertTrue(record.isSome());
assertEquals(new VersionImpl(1), record.get().getSnapshot().get().getVersion());
assertFalse(record.get().getProperties().apply(org.opencastproject.assetmanager.api.fn.Properties.getBoolean("optout")));
assertTrue(record.get().getProperties().apply(org.opencastproject.assetmanager.api.fn.Properties.getStringOpt("last_conflict")).isSome());
assertEquals("new", record.get().getProperties().apply(org.opencastproject.assetmanager.api.fn.Properties.getString("source")));
assertEquals("demo", record.get().getProperties().apply(org.opencastproject.assetmanager.api.fn.Properties.getString("agent")));
assertEquals(SchedulerService.ORIGIN, record.get().getProperties().apply(org.opencastproject.assetmanager.api.fn.Properties.getString("last_modified_origin")));
// Commit again with new changes
trx = schedSvc.createTransaction("new");
trx.addEvent(start, end, "newdevice", userIds, mp, wfProperties, caProperties, Opt.some(false));
try {
// override from transaction
testConflictHandler.setStrategy(Strategy.NEW);
trx.commit();
} catch (SchedulerConflictException e) {
fail("Pre-conflict detection not working!");
}
query = assetManager.createQuery();
result = query.select(query.snapshot(), query.properties()).where(query.organizationId().eq(new DefaultOrganization().getId()).and(query.mediaPackageId(mp.getIdentifier().compact()))).run();
assertEquals(1, result.getSize());
record = result.getRecords().head();
assertTrue(record.isSome());
assertEquals(new VersionImpl(5), record.get().getSnapshot().get().getVersion());
assertFalse(record.get().getProperties().apply(org.opencastproject.assetmanager.api.fn.Properties.getBoolean("optout")));
assertFalse(record.get().getProperties().apply(org.opencastproject.assetmanager.api.fn.Properties.getStringOpt("last_conflict")).isSome());
assertEquals("newdevice", record.get().getProperties().apply(org.opencastproject.assetmanager.api.fn.Properties.getString("agent")));
assertEquals("new", record.get().getProperties().apply(org.opencastproject.assetmanager.api.fn.Properties.getString("source")));
assertEquals("new", record.get().getProperties().apply(org.opencastproject.assetmanager.api.fn.Properties.getString("last_modified_origin")));
// Commit again with new changes
trx = schedSvc.createTransaction("new2");
trx.addEvent(start, end, captureDeviceID, userIds, mp, wfProperties, caProperties, Opt.some(true));
try {
// merge opt out only and keep agent id
testConflictHandler.setStrategy(Strategy.MERGED);
trx.commit();
} catch (SchedulerConflictException e) {
fail("Pre-conflict detection not working!");
}
query = assetManager.createQuery();
result = query.select(query.snapshot(), query.properties()).where(query.organizationId().eq(new DefaultOrganization().getId()).and(query.mediaPackageId(mp.getIdentifier().compact()))).run();
assertEquals(1, result.getSize());
record = result.getRecords().head();
assertTrue(record.isSome());
assertEquals(new VersionImpl(7), record.get().getSnapshot().get().getVersion());
assertFalse(record.get().getProperties().apply(org.opencastproject.assetmanager.api.fn.Properties.getBoolean("optout")));
assertFalse(record.get().getProperties().apply(org.opencastproject.assetmanager.api.fn.Properties.getStringOpt("last_conflict")).isSome());
assertEquals(captureDeviceID, record.get().getProperties().apply(org.opencastproject.assetmanager.api.fn.Properties.getString("agent")));
assertEquals("new2", record.get().getProperties().apply(org.opencastproject.assetmanager.api.fn.Properties.getString("source")));
assertEquals("new2", record.get().getProperties().apply(org.opencastproject.assetmanager.api.fn.Properties.getString("last_modified_origin")));
}
use of org.opencastproject.assetmanager.api.query.AQueryBuilder in project opencast by opencast.
the class SchedulerServiceImplTest method testTransactionCommitCleanup.
@Test
public void testTransactionCommitCleanup() throws Exception {
Date start = new Date();
Date end = new Date(System.currentTimeMillis() + 60000);
String captureDeviceID = "demo";
String seriesId = "series1";
Set<String> userIds = new HashSet<>();
userIds.add("user1");
userIds.add("user2");
MediaPackage mp = generateEvent(Opt.<String>none());
mp.setSeries(seriesId);
DublinCoreCatalog event = generateEvent(captureDeviceID, start, end);
addDublinCore(Opt.<String>none(), mp, event);
Map<String, String> caProperties = generateCaptureAgentMetadata("demo");
MediaPackage mp2 = generateEvent(Opt.<String>none());
SchedulerTransaction trx = schedSvc.createTransaction("new");
assertEquals("new", trx.getSource());
trx.addEvent(start, end, captureDeviceID, userIds, mp, wfPropertiesUpdated, caProperties, Opt.<Boolean>none());
AQueryBuilder query = assetManager.createQuery();
AResult result = query.select(query.snapshot(), query.properties()).where(query.organizationId().eq(new DefaultOrganization().getId()).and(query.version().isLatest())).run();
assertEquals(1, result.getSize());
trx.commit();
query = assetManager.createQuery();
result = query.select(query.snapshot(), query.properties()).where(query.organizationId().eq(new DefaultOrganization().getId()).and(query.version().isLatest())).run();
assertEquals(1, result.getSize());
trx = schedSvc.createTransaction("new");
assertEquals("new", trx.getSource());
trx.addEvent(start, end, captureDeviceID, userIds, mp2, wfPropertiesUpdated, caProperties, Opt.<Boolean>none());
query = assetManager.createQuery();
result = query.select(query.snapshot(), query.properties()).where(query.organizationId().eq(new DefaultOrganization().getId()).and(query.version().isLatest())).run();
assertEquals(2, result.getSize());
trx.commit();
query = assetManager.createQuery();
result = query.select(query.snapshot(), query.properties()).where(query.organizationId().eq(new DefaultOrganization().getId()).and(query.version().isLatest())).run();
assertEquals(1, result.getSize());
try {
schedSvc.getTransaction(trx.getId());
fail("Deleted transaction found!");
} catch (NotFoundException e) {
assertNotNull(e);
}
}
use of org.opencastproject.assetmanager.api.query.AQueryBuilder in project opencast by opencast.
the class SchedulerServiceImplTest method testTransactionCommitCollision.
@Test
public void testTransactionCommitCollision() throws Exception {
Date start = new Date();
Date end = new Date(System.currentTimeMillis() + 60000);
String captureDeviceID = "demo";
String seriesId = "series1";
Set<String> userIds = new HashSet<>();
userIds.add("user1");
userIds.add("user2");
MediaPackage mp = generateEvent(Opt.<String>none());
mp.setSeries(seriesId);
DublinCoreCatalog event = generateEvent(captureDeviceID, start, end);
addDublinCore(Opt.<String>none(), mp, event);
Map<String, String> caProperties = generateCaptureAgentMetadata("demo");
MediaPackage mp2 = generateEvent(Opt.<String>none());
try {
schedSvc.addEvent(start, end, captureDeviceID, userIds, mp2, wfPropertiesUpdated, caProperties, Opt.some(false), Opt.some("existing"), SchedulerService.ORIGIN);
} catch (SchedulerTransactionLockException e) {
fail("Transaction create lock not working!");
}
/* Test transaction collision of already existing event and new transaction event */
SchedulerTransaction trx = schedSvc.createTransaction("new");
assertEquals("new", trx.getSource());
AQueryBuilder query = assetManager.createQuery();
AResult result = query.select(query.snapshot(), query.properties()).where(query.organizationId().eq(new DefaultOrganization().getId()).and(query.mediaPackageId(mp.getIdentifier().compact()))).run();
Opt<ARecord> record = result.getRecords().head();
assertFalse(record.isSome());
trx.addEvent(start, end, captureDeviceID, userIds, mp, wfPropertiesUpdated, caProperties, Opt.some(false));
query = assetManager.createQuery();
result = query.select(query.snapshot(), query.properties()).where(query.organizationId().eq(new DefaultOrganization().getId()).and(query.mediaPackageId(mp.getIdentifier().compact()))).run();
record = result.getRecords().head();
assertTrue(record.isSome());
try {
trx.commit();
fail("Pre-conflict detection not working!");
} catch (SchedulerConflictException e) {
assertNotNull(e);
}
query = assetManager.createQuery();
result = query.select(query.snapshot(), query.properties()).where(query.organizationId().eq(new DefaultOrganization().getId()).and(query.mediaPackageId(mp.getIdentifier().compact()))).run();
record = result.getRecords().head();
assertTrue(record.isSome());
try {
schedSvc.getTransaction(trx.getId());
} catch (NotFoundException e) {
fail("Transaction found!");
}
/* Test transaction collision of already existing event and new opted out transaction event */
MediaPackage mp4 = (MediaPackage) mp.clone();
mp4.setIdentifier(new IdImpl("newuuid"));
SchedulerTransaction trx2 = schedSvc.createTransaction("optedout");
assertEquals("optedout", trx2.getSource());
query = assetManager.createQuery();
result = query.select(query.snapshot(), query.properties()).where(query.organizationId().eq(new DefaultOrganization().getId()).and(query.mediaPackageId(mp4.getIdentifier().compact()))).run();
record = result.getRecords().head();
assertFalse(record.isSome());
trx2.addEvent(start, end, captureDeviceID, userIds, mp4, wfPropertiesUpdated, caProperties, Opt.some(true));
query = assetManager.createQuery();
result = query.select(query.snapshot(), query.properties()).where(query.organizationId().eq(new DefaultOrganization().getId()).and(query.mediaPackageId(mp4.getIdentifier().compact()))).run();
record = result.getRecords().head();
assertTrue(record.isSome());
try {
trx2.commit();
} catch (SchedulerConflictException e) {
fail("Pre-conflict detection not working!");
}
/* Test transaction collision of two transaction events */
schedSvc.removeEvent(mp2.getIdentifier().compact());
MediaPackage mp3 = generateEvent(Opt.<String>none());
trx.addEvent(start, end, captureDeviceID, userIds, mp3, wfPropertiesUpdated, caProperties, Opt.some(false));
try {
trx.commit();
fail("Pre-conflict detection not working!");
} catch (SchedulerConflictException e) {
assertNotNull(e);
}
query = assetManager.createQuery();
result = query.select(query.snapshot(), query.properties()).where(query.organizationId().eq(new DefaultOrganization().getId()).and(query.mediaPackageId(mp.getIdentifier().compact()))).run();
record = result.getRecords().head();
assertTrue(record.isSome());
try {
schedSvc.getTransaction(trx.getId());
} catch (NotFoundException e) {
fail("Transaction found!");
}
/* Test transaction collision of two transaction events but one opted out */
MediaPackage mp5 = (MediaPackage) mp.clone();
mp5.setIdentifier(new IdImpl("newuuid2"));
SchedulerTransaction trx3 = schedSvc.createTransaction("optedout2");
assertEquals("optedout2", trx3.getSource());
query = assetManager.createQuery();
result = query.select(query.snapshot(), query.properties()).where(query.organizationId().eq(new DefaultOrganization().getId()).and(query.mediaPackageId(mp5.getIdentifier().compact()))).run();
record = result.getRecords().head();
assertFalse(record.isSome());
trx3.addEvent(start, end, captureDeviceID, userIds, mp5, wfPropertiesUpdated, caProperties, Opt.some(false));
query = assetManager.createQuery();
result = query.select(query.snapshot(), query.properties()).where(query.organizationId().eq(new DefaultOrganization().getId()).and(query.mediaPackageId(mp5.getIdentifier().compact()))).run();
record = result.getRecords().head();
assertTrue(record.isSome());
MediaPackage mp6 = generateEvent(Opt.<String>none());
trx.addEvent(start, end, captureDeviceID, userIds, mp6, wfPropertiesUpdated, caProperties, Opt.some(true));
try {
trx3.commit();
} catch (SchedulerConflictException e) {
fail("Pre-conflict detection not working!");
}
}
Aggregations