def setUp(self):
     # Simulated filter for 2 radars (2*3 measurements)
     self.filter = ExtendedKalmanFilter(dim_x = 9, dim_z = 6)
     self.gamma = np.eye(3)
     self.mag_vector = np.array([[-10, -10, -10]]).T
     self.t0 = 10
     self.time = 50
     self.radar = Radar(x=10,y=10)
     self.radar_pos = 1
     self.attacker = PeriodAttacker(filter = self.filter,
                                       radar = self.radar, radar_pos = self.radar_pos,
                                       gamma = self.gamma,mag_vector = self.mag_vector,
                                       t0 = self.t0, time = self.time)
 def test_initialization_attack_no_effect(self):
     with self.assertWarns(Warning):
         mag_vector = np.array([[0, 0, 0]]).T
         att  =  PeriodAttacker(filter = self.filter,
                                   radar = self.radar, radar_pos = self.radar_pos,
                                   gamma = self.gamma, mag_vector = mag_vector,
                                   t0 = self.t0, time = self.time)
 def test_initialization_wrong_mag_vector(self):
     with self.assertRaises(ValueError):
         mag_vector = np.array([[-10,-10]])
         attacker = PeriodAttacker(filter = self.filter,
                                      radar = self.radar, radar_pos = self.radar_pos,
                                      gamma = self.gamma,mag_vector = mag_vector,
                                      t0 = self.t0, time = self.time)
 def test_initialization_wrong_gamma(self):
     with self.assertRaises(ValueError):
         filter = ExtendedKalmanFilter(dim_x = 9, dim_z = 6)
         gamma  = np.array([[1, 0, 0, 0],
                            [0, 1, 0, 0],
                            [0, 0, 1, 0],
                            [0, 0, 0, 1]])
         attacker = PeriodAttacker(filter = self.filter,
                                      radar = self.radar, radar_pos = self.radar_pos,
                                      gamma = gamma,mag_vector = self.mag_vector,
                                      t0 = self.t0, time = self.time)
    def test_initialization_given_pos(self):
        # Expected results
        gamma =  np.array([[1, 0, 0],
                           [0, 1, 0],
                           [0, 0, 1]])
        mag_vector = np.array([[1,1,1]]).T
        radar_pos = 0

        #Generation
        att = PeriodAttacker(filter = self.filter, radar_pos = radar_pos,
                                radar = self.radar,t0 = self.t0, time = self.time)
        computed_gamma      = att.gamma
        computed_mag_vector = att.mag_vector

        # Comparison
        self.assertTrue(np.array_equal(gamma,computed_gamma))
        self.assertTrue(np.array_equal(mag_vector,computed_mag_vector))
class PeriodAttackerTestCase(unittest.TestCase):
    def setUp(self):
        # Simulated filter for 2 radars (2*3 measurements)
        self.filter = ExtendedKalmanFilter(dim_x = 9, dim_z = 6)
        self.gamma = np.eye(3)
        self.mag_vector = np.array([[-10, -10, -10]]).T
        self.t0 = 10
        self.time = 50
        self.radar = Radar(x=10,y=10)
        self.radar_pos = 1
        self.attacker = PeriodAttacker(filter = self.filter,
                                          radar = self.radar, radar_pos = self.radar_pos,
                                          gamma = self.gamma,mag_vector = self.mag_vector,
                                          t0 = self.t0, time = self.time)

    # ==========================================================================
    # ========================== Initialization tests ==========================

    def test_initialization_no_errors(self):
        self.assertTrue(np.array_equal(self.attacker.gamma,self.gamma))
        self.assertTrue(np.array_equal(self.attacker.mag_vector,self.mag_vector))
        self.assertEqual(self.t0,10)
        self.assertEqual(self.time,50)

    def test_initialization_wrong_mag_vector(self):
        with self.assertRaises(ValueError):
            mag_vector = np.array([[-10,-10]])
            attacker = PeriodAttacker(filter = self.filter,
                                         radar = self.radar, radar_pos = self.radar_pos,
                                         gamma = self.gamma,mag_vector = mag_vector,
                                         t0 = self.t0, time = self.time)

    def test_initialization_wrong_gamma(self):
        with self.assertRaises(ValueError):
            filter = ExtendedKalmanFilter(dim_x = 9, dim_z = 6)
            gamma  = np.array([[1, 0, 0, 0],
                               [0, 1, 0, 0],
                               [0, 0, 1, 0],
                               [0, 0, 0, 1]])
            attacker = PeriodAttacker(filter = self.filter,
                                         radar = self.radar, radar_pos = self.radar_pos,
                                         gamma = gamma,mag_vector = self.mag_vector,
                                         t0 = self.t0, time = self.time)

    def test_initialization_attack_no_effect(self):
        with self.assertWarns(Warning):
            mag_vector = np.array([[0, 0, 0]]).T
            att  =  PeriodAttacker(filter = self.filter,
                                      radar = self.radar, radar_pos = self.radar_pos,
                                      gamma = self.gamma, mag_vector = mag_vector,
                                      t0 = self.t0, time = self.time)

    def test_initialization_given_pos(self):
        # Expected results
        gamma =  np.array([[1, 0, 0],
                           [0, 1, 0],
                           [0, 0, 1]])
        mag_vector = np.array([[1,1,1]]).T
        radar_pos = 0

        #Generation
        att = PeriodAttacker(filter = self.filter, radar_pos = radar_pos,
                                radar = self.radar,t0 = self.t0, time = self.time)
        computed_gamma      = att.gamma
        computed_mag_vector = att.mag_vector

        # Comparison
        self.assertTrue(np.array_equal(gamma,computed_gamma))
        self.assertTrue(np.array_equal(mag_vector,computed_mag_vector))
    # =======================================================
    # ========================== Listening/Attack tests ========================

    def test_listen_measurement_increments_time(self):
        measurements = [np.ones((3,1))*i for i in range(100)]
        tags  = [1]*100
        times = [i/10 for i in range(100)]
        labeled_measurements = [LabeledMeasurement(tag,time,value) for tag,time,value in zip(tags,times,measurements)]
        for i,labeled_measurement in enumerate(labeled_measurements):
            self.assertEqual(self.attacker.current_time,i)
            self.attacker.listen_measurement(labeled_measurement)

    def test_listen_measurement_1_step_attack(self):
        measurement = np.array([[10,10,10]]).T
        tag         = 1
        time        = 1
        labeled_measurement = LabeledMeasurement(tag = tag, time = time, value = measurement)

        modified_measurement = np.array([[0,0,0]]).T
        tag         = 1
        time        = 1
        modified_labeled_measurement = LabeledMeasurement(tag = tag, time = time, value = modified_measurement)

        self.attacker.t0     = 0
        computed_measurement = self.attacker.listen_measurement(labeled_measurement)
        self.assertEqual(modified_labeled_measurement,computed_measurement)

    def test_listen_measurement_1_step_no_attack(self):
        measurement = np.array([[10,10,10]]).T
        tag         = 1
        time        = 1
        labeled_measurement = LabeledMeasurement(tag = tag, time = time, value = measurement)
        computed_measurement = self.attacker.listen_measurement(labeled_measurement)
        self.assertEqual(labeled_measurement,computed_measurement)

    def test_unattacked_vectors(self):
        measurements = [np.ones((3,1))*i for i in range(100)]
        tags  = [1]*100
        times = [i/10 for i in range(100)]
        labeled_measurements = [LabeledMeasurement(tag,time,value) for tag,time,value in zip(tags,times,measurements)]

        modified_measurements = []
        for i,labeled_measurement in enumerate(labeled_measurements):
            mod_meas = self.attacker.listen_measurement(labeled_measurement)
            modified_measurements.append(mod_meas)

        # Unattacked measurements from 0 to 10
        measurements = [np.ones((3,1))*i for i in range(10)]
        tags  = [1]*10
        times = [i/10 for i in range(10)]
        unattacked_measurements1 = [LabeledMeasurement(tag,time,value) for tag,time,value in zip(tags,times,measurements)]

        # Unattacked measurements from 60 to 100
        measurements = [np.ones((3,1))*i for i in range(60,100)]
        tags  = [1]*40
        times = [i/10 for i in range(60,100)]
        unattacked_measurements2 = [LabeledMeasurement(tag,time,value) for tag,time,value in zip(tags,times,measurements)]

        comparison_list_1 = zip(unattacked_measurements1,  modified_measurements[0:10])
        comparison_list_2 = zip(unattacked_measurements2,  modified_measurements[60:100])
        self.assertTrue(all((meas == mod_meas) for meas, mod_meas in comparison_list_1))
        self.assertTrue(all((meas == mod_meas) for meas, mod_meas in comparison_list_2))
Beispiel #7
0
 def listen_measurement(self, measurement):
     return PeriodAttacker.listen_measurement(self, measurement)
Beispiel #8
0
 def __init__(self, delta_drift=None, *args, **kwargs):
     if delta_drift is None:
         delta_drift = np.array([[0, 0, 1]]).T
     self.delta_drift = delta_drift
     self.attack_drift = deepcopy(delta_drift)
     PeriodAttacker.__init__(self, *args, **kwargs)
Beispiel #9
0
 def __init__(self, attack_drift=None, *args, **kwargs):
     if attack_drift is None:
         attack_drift = np.array([[0, 0, 10]]).T
     self.attack_drift = attack_drift
     PeriodAttacker.__init__(self, *args, **kwargs)
Beispiel #10
0
 def __init__(self, mag=1e4, *args, **kwargs):
     PeriodAttacker.__init__(self, *args, **kwargs)
     self.mag_vector = self.mag_vector * mag