def test_startstop_qualifier(): qual = stix2.StartStopQualifier(stix2.TimestampConstant('2016-06-01T00:00:00Z'), datetime.datetime(2017, 3, 12, 8, 30, 0)) assert str(qual) == "START t'2016-06-01T00:00:00Z' STOP t'2017-03-12T08:30:00Z'" qual2 = stix2.StartStopQualifier(datetime.date(2016, 6, 1), stix2.TimestampConstant('2016-07-01T00:00:00Z')) assert str(qual2) == "START t'2016-06-01T00:00:00Z' STOP t'2016-07-01T00:00:00Z'"
def test_invalid_startstop_qualifier(): with pytest.raises(ValueError) as excinfo: stix2.StartStopQualifier( 'foo', stix2.TimestampConstant('2016-06-01T00:00:00Z')) assert 'is not a valid argument for a Start/Stop Qualifier' in str(excinfo) with pytest.raises(ValueError) as excinfo: stix2.StartStopQualifier(datetime.date(2016, 6, 1), 'foo') assert 'is not a valid argument for a Start/Stop Qualifier' in str(excinfo)
def test_invalid_startstop_qualifier(): with pytest.raises(ValueError): stix2.StartStopQualifier( 'foo', stix2.StringConstant('2016-06-01T00:00:00Z'), ) with pytest.raises(ValueError): stix2.StartStopQualifier( datetime.date(2016, 6, 1), 'foo', )
def test_startstop_qualifier(): qual = stix2.StartStopQualifier( stix2.StringConstant('2016-06-01T00:00:00Z'), stix2.StringConstant('2017-03-12T08:30:00Z'), ) assert str( qual) == "START '2016-06-01T00:00:00Z' STOP '2017-03-12T08:30:00Z'" qual2 = stix2.StartStopQualifier( stix2.StringConstant("2016-06-01T00:00:00Z"), stix2.StringConstant('2016-07-01T00:00:00Z'), ) assert str( qual2) == "START '2016-06-01T00:00:00Z' STOP '2016-07-01T00:00:00Z'"
def visitStartStopQualifier(self, ctx): children = self.visitChildren(ctx) return stix2.StartStopQualifier(children[1], children[3])
def __generate_random_qualifier(self): """ Generate a random qualifier AST object. :return: The qualifier object """ qual_type = random.randrange(3) if qual_type == 0: repeat_count = random.randint(self.__config.min_repeat_count, self.__config.max_repeat_count) qualifier = stix2.RepeatQualifier(repeat_count) elif qual_type == 1: within_count = random.randint(self.__config.min_within_count, self.__config.max_within_count) qualifier = stix2.WithinQualifier(within_count) else: # Let's make the random timestamps near the current time # (within a year). dur1 = datetime.timedelta(microseconds=random.randrange( # 1 year 1000000 * 60 * 60 * 24 * 365)) dur2 = datetime.timedelta(microseconds=random.randrange( # 1 year 1000000 * 60 * 60 * 24 * 365)) if random.random() < 0.5: dur1 = -dur1 if random.random() < 0.5: dur2 = -dur2 now = datetime.datetime.utcnow() dt1 = now + dur1 dt2 = now + dur2 # Order them as start=dt1, stop=dt2 if dt1 > dt2: dt1, dt2 = dt2, dt1 elif dt1 == dt2: # in the remote chance we get the same timestamp for both, # just nudge one ahead... dt2 += datetime.timedelta(seconds=1) # STIX 2.0 requires string constants and millisecond precision # here... if self.__stix_version == "2.0": dt1_str = stix2.utils.format_datetime( stix2.utils.STIXdatetime(dt1, precision="millisecond")) dt1 = stix2.patterns.StringConstant(dt1_str) dt2_str = stix2.utils.format_datetime( stix2.utils.STIXdatetime(dt2, precision="millisecond")) dt2 = stix2.patterns.StringConstant(dt2_str) qualifier = stix2.StartStopQualifier(dt1, dt2) return qualifier