1# Copyright (c) 2017, The MITRE Corporation. All rights reserved. 2# See LICENSE.txt for complete terms. 3 4import unittest 5 6from stix.test import EntityTestCase, TypedListTestCase, assert_warnings 7import stix.test.data_marking_test as data_marking_test 8from stix.test.common import ( 9 confidence_test, information_source_test, statement_test, related_test, 10 activity_test 11) 12 13from stix.test import assert_warnings 14from stix.core import STIXPackage 15import stix.campaign as campaign 16 17 18class NamesTests(EntityTestCase, unittest.TestCase): 19 klass = campaign.Names 20 21 _full_dict = { 22 'names': [ 23 "Dancing Hippos", 24 "Crazy Squirrels", 25 { 26 'value': "Medium", 27 'xsi:type':'stixVocabs:HighMediumLowVocab-1.0' 28 } 29 ] 30 } 31 32 33class IntendedEffectsTests(TypedListTestCase, unittest.TestCase): 34 klass = campaign.Campaign 35 36 _partial_dict = [ 37 statement_test.StatementTests._full_dict 38 ] 39 40 _full_dict = { 41 'intended_effects': _partial_dict, 42 } 43 44class RelatedTTPsTest(EntityTestCase, unittest.TestCase): 45 klass = campaign.RelatedTTPs 46 47 _full_dict = { 48 'scope': 'exclusive', 49 'ttps': [ 50 related_test.RelatedTTPTests._full_dict, 51 ] 52 } 53 54 55class RelatedIncidentsTests(EntityTestCase, unittest.TestCase): 56 klass = campaign.RelatedIncidents 57 58 _full_dict = { 59 'incidents': [ 60 related_test.RelatedIncidentTests._full_dict 61 ] 62 } 63 64 65class RelatedIndicatorsTests(EntityTestCase, unittest.TestCase): 66 klass = campaign.RelatedIndicators 67 68 _full_dict = { 69 'indicators': [ 70 related_test.RelatedIndicatorTests._full_dict 71 ] 72 } 73 74class AttributionTests(EntityTestCase, unittest.TestCase): 75 klass = campaign.Attribution 76 77 _full_dict = { 78 'scope': 'exclusive', 79 'threat_actors': [ 80 related_test.RelatedThreatActorTests._full_dict, 81 ] 82 } 83 84 85class AttributionListTests(TypedListTestCase, unittest.TestCase): 86 klass = campaign.Campaign 87 88 _full_dict = { 'attribution': [ 89 AttributionTests._full_dict 90 ] } 91 92 93class AssociatedCampaignsTests(EntityTestCase, unittest.TestCase): 94 klass = campaign.AssociatedCampaigns 95 96 _full_dict = { 97 'scope': 'inclusive', 98 'campaigns': [ 99 related_test.RelatedCampaignTests._full_dict 100 ] 101 } 102 103 104class ActivityTests(TypedListTestCase, unittest.TestCase): 105 klass = campaign.Activity 106 107 _full_dict = activity_test.ActivityTests._full_dict 108 109 110 111class CampaignTest(EntityTestCase, unittest.TestCase): 112 klass = campaign.Campaign 113 _full_dict = { 114 'id': "example:test-1", 115 'timestamp': "2014-01-31T06:14:46", 116 'version': '1.2', 117 'title': 'Purple Elephant', 118 'description': 'A pretty novice set of actors.', 119 'short_description': 'novices', 120 'names': NamesTests._full_dict, 121 'intended_effects': IntendedEffectsTests._partial_dict, 122 'status': { 123 'value': "Ongoing", 124 'xsi:type':'stixVocabs:CampaignStatusVocab-1.0' 125 }, 126 'related_ttps': RelatedTTPsTest._full_dict, 127 'related_incidents': RelatedIncidentsTests._full_dict, 128 'related_indicators': RelatedIndicatorsTests._full_dict, 129 'attribution': [AttributionTests._full_dict], 130 'associated_campaigns': AssociatedCampaignsTests._full_dict, 131 'confidence': confidence_test.ConfidenceTests._full_dict, 132 'activity': [ActivityTests._full_dict], 133 'information_source': information_source_test.InformationSourceTests._full_dict, 134 'handling': data_marking_test.MarkingTests._full_dict, 135 'related_packages': related_test.RelatedPackageRefsTests._full_dict 136 } 137 138 def test_add_description(self): 139 o1 = self.klass() 140 o2 = self.klass() 141 142 o1.add_description("Test") 143 o2.descriptions.add("Test") 144 145 self.assertEqual( 146 o1.descriptions.to_dict(), 147 o2.descriptions.to_dict() 148 ) 149 150 def test_add_short_description(self): 151 o1 = self.klass() 152 o2 = self.klass() 153 154 o1.add_short_description("Test") 155 o2.short_descriptions.add("Test") 156 157 self.assertEqual( 158 o1.short_descriptions.to_dict(), 159 o2.short_descriptions.to_dict() 160 ) 161 162 @assert_warnings 163 def test_deprecated_related_packages(self): 164 c = campaign.Campaign() 165 c.related_packages.append(STIXPackage()) 166 167 @assert_warnings 168 def test_deprecated_related_indicators(self): 169 from stix.indicator import Indicator 170 171 c = campaign.Campaign() 172 c.related_indicators.append(Indicator()) 173 self.assertEqual(1, len(c.related_indicators)) 174 175 176if __name__ == "__main__": 177 unittest.main() 178