comparison Tests/Tests.py @ 10:5f73008bb873

tests
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 18 Jun 2015 13:38:32 +0200
parents f8d781d1d267
children c660a64ce2dd
comparison
equal deleted inserted replaced
9:3670535fbd4b 10:5f73008bb873
359 a = subprocess.check_output([ 'dcm2xml', '/tmp/DICOMDIR' ]) 359 a = subprocess.check_output([ 'dcm2xml', '/tmp/DICOMDIR' ])
360 self.assertTrue(re.search('1.3.46.670589.11.17521.5.0.3124.2008081908590448738', a) != None) 360 self.assertTrue(re.search('1.3.46.670589.11.17521.5.0.3124.2008081908590448738', a) != None)
361 self.assertTrue(re.search('1.3.46.670589.11.17521.5.0.3124.2008081909113806560', a) != None) 361 self.assertTrue(re.search('1.3.46.670589.11.17521.5.0.3124.2008081909113806560', a) != None)
362 362
363 os.remove('/tmp/DICOMDIR') 363 os.remove('/tmp/DICOMDIR')
364
365
366 def test_protection(self):
367 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm')
368 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0001.dcm')
369 self.assertEqual(2, len(DoGet(_REMOTE, '/patients')))
370 a = DoGet(_REMOTE, '/patients')[0]
371 b = DoGet(_REMOTE, '/patients')[1]
372 self.assertEqual(0, DoGet(_REMOTE, '/patients/%s/protected' % a))
373 DoPut(_REMOTE, '/patients/%s/protected' % a, '0', 'text/plain')
374 self.assertEqual(0, DoGet(_REMOTE, '/patients/%s/protected' % a))
375 DoPut(_REMOTE, '/patients/%s/protected' % a, '1', 'text/plain')
376 self.assertEqual(1, DoGet(_REMOTE, '/patients/%s/protected' % a))
377 DoPut(_REMOTE, '/patients/%s/protected' % a, '0', 'text/plain')
378 self.assertEqual(0, DoGet(_REMOTE, '/patients/%s/protected' % a))
379
380
381 def test_private_tags(self):
382 i = UploadInstance(_REMOTE, 'PrivateTags.dcm')['ID']
383
384 dicom = DoGet(_REMOTE, '/instances/%s/file' % i)
385 self.assertEqual('1a7c56cb02d6e742cc9c856a8ac182e3', ComputeMD5(dicom))
386
387 s = '/instances/%s/content/' % i
388
389 self.assertEqual('LOGIQBOOK', DoGet(_REMOTE, s + '0008-1010').strip())
390 self.assertRaises(Exception, lambda: DoGet(_REMOTE, s + '0008-1011'))
391
392 self.assertEqual('Abdomen', DoGet(_REMOTE, s + '7fe1-1001/0/7fe1-1008/0/7fe1-1057').strip())
393 self.assertEqual('cla_3c', DoGet(_REMOTE, s + '7fe1-1001/0/7fe1-1008/8/7fe1-1057').strip())
394
395
396 def test_sop_instance_uid(self):
397 UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-0001.dcm')
398 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-0001.dcm')
399 UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm')
400 UploadInstance(_REMOTE, 'Knee/T2/IM-0001-0001.dcm')
401
402 for i in DoGet(_REMOTE, '/instances'):
403 aid = DoGet(_REMOTE, '/instances/%s' % i)['MainDicomTags']['SOPInstanceUID']
404 self.assertEqual(aid, DoGet(_REMOTE, '/instances/%s/content/0008-0018' % i).replace(chr(0), ''))
405
406
407 def test_raw_tags_mdn(self):
408 # Bug reported by Cyril Paulus
409 i = UploadInstance(_REMOTE, 'PrivateMDNTags.dcm')['ID']
410 self.assertAlmostEqual(0.000027, DoGet(_REMOTE, '/instances/%s/content/7053-1000' % i))
411
412
413 def test_modify_instance(self):
414 i = UploadInstance(_REMOTE, 'PrivateTags.dcm')['ID']
415 modified = DoPost(_REMOTE, '/instances/%s/modify' % i,
416 json.dumps({
417 "Replace" : {
418 "PatientName" : "hello",
419 #"PatientID" : "world"
420 },
421 "Remove" : [ "StationName" ],
422 "RemovePrivateTags" : None
423 }),
424 'application/json')
425 j = DoPost(_REMOTE, '/instances', modified, 'application/dicom')['ID']
426
427 self.assertNotEqual('hello', DoGet(_REMOTE, '/instances/%s/content/0010-0010' % i).strip())
428 #self.assertNotEqual('world', DoGet(_REMOTE, '/instances/%s/content/0010-0020' % i).strip())
429 self.assertEqual('LOGIQBOOK', DoGet(_REMOTE, '/instances/%s/content/0008-1010' % i).strip())
430 DoGet(_REMOTE, '/instances/%s/content/6003-1010' % i) # Some private tag
431
432 self.assertEqual('hello', DoGet(_REMOTE, '/instances/%s/content/0010-0010' % j).strip())
433 #self.assertEqual('world', DoGet(_REMOTE, '/instances/%s/content/0010-0020' % j).strip())
434 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/content/0008-1010' % j))
435 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/content/6003-1010' % j))
436
437
438 def test_modify_series(self):
439 # Upload 4 images from the same series
440 for i in range(4):
441 UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-000%d.dcm' % (i + 1))
442
443 origSeries = DoGet(_REMOTE, '/series')[0]
444 newSeries = DoPost(_REMOTE, '/series/%s/modify' % origSeries,
445 '{"Replace":{"PatientName":"Jodogne"}}',
446 'application/json')['ID']
447
448 self.assertEqual(origSeries, DoGet(_REMOTE, '/series/%s' % newSeries)['ModifiedFrom'])
449 instances = DoGet(_REMOTE, '/series/%s' % newSeries)['Instances']
450 self.assertEqual(4, len(instances))
451 for i in instances:
452 j = DoGet(_REMOTE, '/instances/%s' % i)['ModifiedFrom']
453 self.assertEqual(newSeries, DoGet(_REMOTE, '/instances/%s' % i)['ParentSeries'])
454 self.assertEqual(origSeries, DoGet(_REMOTE, '/instances/%s' % j)['ParentSeries'])
455
456 self.assertEqual('Jodogne', DoGet(_REMOTE, '/instances/%s/content/0010-0010' % i).strip())
457 self.assertNotEqual('Jodogne', DoGet(_REMOTE, '/instances/%s/content/0010-0010' % j).strip())
458
459
460 def test_modify_study(self):
461 # Upload 4 images from the 2 series of the same study
462 for i in range(4):
463 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-000%d.dcm' % (i + 1))
464 UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-000%d.dcm' % (i + 1))
465
466 origStudy = DoGet(_REMOTE, '/studies')[0]
467 newStudy = DoPost(_REMOTE, '/studies/%s/modify' % origStudy,
468 '{"Replace":{"PatientName":"Jodogne"}}',
469 'application/json')['ID']
470
471 self.assertEqual(origStudy, DoGet(_REMOTE, '/studies/%s' % newStudy)['ModifiedFrom'])
472 series = DoGet(_REMOTE, '/studies/%s' % newStudy)['Series']
473 self.assertEqual(2, len(series))
474 for s in series:
475 ss = DoGet(_REMOTE, '/series/%s' % s)['ModifiedFrom']
476 self.assertEqual(newStudy, DoGet(_REMOTE, '/series/%s' % s)['ParentStudy'])
477 self.assertEqual(origStudy, DoGet(_REMOTE, '/series/%s' % ss)['ParentStudy'])
478
479 instances = DoGet(_REMOTE, '/series/%s' % s)['Instances']
480 for i in instances:
481 j = DoGet(_REMOTE, '/instances/%s' % i)['ModifiedFrom']
482 self.assertEqual(s, DoGet(_REMOTE, '/instances/%s' % i)['ParentSeries'])
483 self.assertEqual(ss, DoGet(_REMOTE, '/instances/%s' % j)['ParentSeries'])
484
485 self.assertEqual('Jodogne', DoGet(_REMOTE, '/instances/%s/content/0010-0010' % i).strip())
486 self.assertNotEqual('Jodogne', DoGet(_REMOTE, '/instances/%s/content/0010-0010' % j).strip())
487
488
489 def test_anonymize_series(self):
490 # Upload 4 images from the same series
491 for i in range(4):
492 UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-000%d.dcm' % (i + 1))
493
494 origSeries = DoGet(_REMOTE, '/series')[0]
495 newSeries = DoPost(_REMOTE, '/series/%s/anonymize' % origSeries,
496 '{}',
497 'application/json')['ID']
498
499 self.assertEqual(origSeries, DoGet(_REMOTE, '/series/%s' % newSeries)['AnonymizedFrom'])
500 instances = DoGet(_REMOTE, '/series/%s' % newSeries)['Instances']
501 self.assertEqual(4, len(instances))
502 for i in instances:
503 j = DoGet(_REMOTE, '/instances/%s' % i)['AnonymizedFrom']
504 self.assertEqual(newSeries, DoGet(_REMOTE, '/instances/%s' % i)['ParentSeries'])
505 self.assertEqual(origSeries, DoGet(_REMOTE, '/instances/%s' % j)['ParentSeries'])
506
507 DoGet(_REMOTE, '/instances/%s/content/0008-1010' % j)
508 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/content/0008-1010' % i))
509
510
511 def test_anonymize_study(self):
512 # Upload 4 images from the 2 series of the same study
513 for i in range(4):
514 UploadInstance(_REMOTE, 'Brainix/Flair/IM-0001-000%d.dcm' % (i + 1))
515 UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-000%d.dcm' % (i + 1))
516
517 origStudy = DoGet(_REMOTE, '/studies')[0]
518 newStudy = DoPost(_REMOTE,'/studies/%s/anonymize' % origStudy,
519 '{"Replace":{"PatientName":"Jodogne"}}',
520 'application/json')['ID']
521
522 self.assertEqual(origStudy, DoGet(_REMOTE, '/studies/%s' % newStudy)['AnonymizedFrom'])
523 series = DoGet(_REMOTE, '/studies/%s' % newStudy)['Series']
524 self.assertEqual(2, len(series))
525 for s in series:
526 ss = DoGet(_REMOTE, '/series/%s' % s)['AnonymizedFrom']
527 self.assertEqual(newStudy, DoGet(_REMOTE, '/series/%s' % s)['ParentStudy'])
528 self.assertEqual(origStudy, DoGet(_REMOTE, '/series/%s' % ss)['ParentStudy'])
529
530 instances = DoGet(_REMOTE, '/series/%s' % s)['Instances']
531 for i in instances:
532 j = DoGet(_REMOTE, '/instances/%s' % i)['AnonymizedFrom']
533 self.assertEqual(s, DoGet(_REMOTE, '/instances/%s' % i)['ParentSeries'])
534 self.assertEqual(ss, DoGet(_REMOTE, '/instances/%s' % j)['ParentSeries'])
535
536 self.assertEqual('Jodogne', DoGet(_REMOTE, '/instances/%s/content/0010-0010' % i).strip())
537 self.assertNotEqual('Jodogne', DoGet(_REMOTE, '/instances/%s/content/0010-0010' % j).strip())