00001
00002
00003 import time
00004 import unittest
00005
00006 import roslib; roslib.load_manifest('network_control_tests')
00007 import rospy
00008 import rostest
00009
00010 import dynamic_reconfigure.client
00011 from ieee80211_channels.channels import IEEE80211_Channels
00012
00013 class LinksysTest(unittest.TestCase):
00014 def __init__(self, *args):
00015 super(LinksysTest, self).__init__(*args)
00016 rospy.init_node('linksys_access_point_test')
00017
00018 self.dyn_ap24 = dynamic_reconfigure.client.Client("linksys_2_4")
00019 self.dyn_ap5 = dynamic_reconfigure.client.Client("linksys_5")
00020
00021 def test_linksys_24(self):
00022 start_time = time.time()
00023 config = self.dyn_ap24.update_configuration({"enabled": False})
00024 rospy.loginfo("Disabling interface (while previously disabled) executed in: %.2fs", time.time() - start_time)
00025 self.assertTrue(config['status'] == "OK",
00026 "Operation failed: " + config['errmsg'])
00027
00028 start_time = time.time()
00029 config = self.dyn_ap24.update_configuration({"ssid": "testnet", "mode": "g"})
00030 rospy.loginfo("Updating configuration (while disabled) executed in: %.2fs", time.time() - start_time)
00031 self.assertTrue(config['status'] == "OK",
00032 "Operation failed: " + config['errmsg'])
00033 self.assertFalse(config['enabled'],
00034 "Expected AP to be stopped")
00035
00036 start_time = time.time()
00037 config = self.dyn_ap24.update_configuration({"enabled": True})
00038 rospy.loginfo("Enabling interface executed in: %.2fs", time.time() - start_time)
00039 self.assertTrue(config['status'] == "OK",
00040 "Operation failed: " + config['errmsg'])
00041
00042 start_time = time.time()
00043 config = self.dyn_ap24.update_configuration({"ssid": "anotherssid", "encryption_mode": "wep", "encryption_pass": "0123456789",
00044 "ieee80211n": True, "wmm": True})
00045 rospy.loginfo("Updating config (while enabled) executed in: %.2fs", time.time() - start_time)
00046 self.assertTrue(config['status'] == "OK",
00047 "Operation failed: " + config['errmsg'])
00048
00049 start_time = time.time()
00050 config = self.dyn_ap24.update_configuration({"mode": "a", "ieee80211n": False})
00051 rospy.loginfo("Updating config (while enabled) with bad params executed in: %.2fs", time.time() - start_time)
00052 self.assertTrue(config['status'] == "FAIL",
00053 "Expected setting mode 802.11a on 2.4GHz interface to fail")
00054
00055 start_time = time.time()
00056 config = self.dyn_ap24.update_configuration({"enabled": True,
00057 "mode": "b", "ieee80211n": False, "txpower": -5, "bitrate": 1000000})
00058 rospy.loginfo("Updating config (while enabled) including txpower executed in: %.2fs", time.time() - start_time)
00059 self.assertTrue(config['status'] == "OK",
00060 "Operation failed: " + config['errmsg'])
00061 self.assertTrue(config['txpower'] >= 0,
00062 "Expected txpower to be greater than 0 instead it was: %d dBm"%(config['txpower']))
00063
00064 start_time = time.time()
00065 config = self.dyn_ap24.update_configuration({"bitrate": 11000000})
00066 rospy.loginfo("Updating just bitrate (while enabled) executed in: %.2fs", time.time() - start_time)
00067 self.assertTrue(config['status'] == "OK",
00068 "Operation failed: " + config['errmsg'])
00069 self.assertTrue(config['bitrate'] == 11000000,
00070 "Expected bitrate to be 11M instead it was: %d"%(config['bitrate']))
00071
00072 start_time = time.time()
00073 config = self.dyn_ap24.update_configuration({"enabled": False})
00074 rospy.loginfo("Disabling interface (previously enabled) exeuted in: %.2fs", time.time() - start_time)
00075 self.assertTrue(config['status'] == "OK",
00076 "Operation failed: " + config['errmsg'])
00077 self.assertFalse(config['enabled'],
00078 "Expected AP to be stopped")
00079
00080 def test_linksys_5(self):
00081 config = self.dyn_ap5.update_configuration({"enabled": False, "mode": "b", "ieee80211n": False, "freq": 0,
00082 "bitrate": 0})
00083 self.assertTrue(config['status'] == "OK",
00084 "Operation failed: " + config['errmsg'])
00085
00086 start_time = time.time()
00087 config = self.dyn_ap5.update_configuration({"enabled": True})
00088 rospy.loginfo("Failed enable executed in: %.2fs", time.time() - start_time)
00089 self.assertTrue(config['status'] == "FAIL",
00090 "Expected enabling 5GHz interface while in default mode 'b' to fail" +
00091 ", returned config: " + str(config))
00092 self.assertFalse(config['enabled'],
00093 "Expected AP to be stopped")
00094
00095 start_time = time.time()
00096 config = self.dyn_ap5.update_configuration({"enabled": True, "mode": "a",
00097 "freq": IEEE80211_Channels.get_freq(153, IEEE80211_Channels.BAND_5000_MHz)})
00098 rospy.loginfo("Enabling 5GHz executed in: %.2fs", time.time() - start_time)
00099 self.assertTrue(config['status'] == "OK",
00100 "Operation failed: " + config['errmsg'])
00101 self.assertTrue(config['enabled'],
00102 "Expected AP to be running")
00103
00104 start_time = time.time()
00105 config = self.dyn_ap5.update_configuration({"freq": IEEE80211_Channels.get_freq(161, IEEE80211_Channels.BAND_5000_MHz)})
00106 rospy.loginfo("Change channel 5GHz executed in: %.2fs", time.time() - start_time)
00107 self.assertTrue(config['status'] == "OK",
00108 "Operation failed: " + config['errmsg'])
00109
00110 start_time = time.time()
00111 config = self.dyn_ap5.update_configuration({"ieee80211n": True, "bitrate": 0})
00112 rospy.loginfo("Enabling 802.11n executed in: %.2fs", time.time() - start_time)
00113 self.assertTrue(config['status'] == "OK",
00114 "Operation failed: " + config['errmsg'])
00115
00116 start_time = time.time()
00117 config = self.dyn_ap5.update_configuration({"enabled": False})
00118 rospy.loginfo("Disabling 5GHz executed in: %.2fs", time.time() - start_time)
00119 self.assertTrue(config['status'] == "OK",
00120 "Operation failed: " + config['errmsg'])
00121 self.assertFalse(config['enabled'],
00122 "Expected AP to be stopped")
00123
00124 def test_linksys_both(self):
00125 config = self.dyn_ap5.update_configuration({"enabled": True, "mode": "a", "bitrate": 0, "wmm": False,
00126 "freq": IEEE80211_Channels.get_freq(153, IEEE80211_Channels.BAND_5000_MHz)})
00127 self.assertTrue(config['status'] == "OK",
00128 "Operation failed: " + config['errmsg'])
00129 config = self.dyn_ap24.update_configuration({"enabled": True, "mode": "g", "ieee80211n": True, "bitrate": 0, "wmm": False,
00130 "freq": IEEE80211_Channels.get_freq(9, IEEE80211_Channels.BAND_2400_MHz)})
00131 self.assertTrue(config['status'] == "OK",
00132 "Operation failed: " + config['errmsg'])
00133
00134 config = self.dyn_ap24.update_configuration({"ssid": "myssid24"})
00135 self.assertTrue(config['status'] == "OK",
00136 "Operation failed: " + config['errmsg'])
00137
00138 config = self.dyn_ap5.update_configuration({"ssid": "myssid5"})
00139 self.assertTrue(config['status'] == "OK",
00140 "Operation failed: " + config['errmsg'])
00141
00142 config = self.dyn_ap24.update_configuration({"txpower": 30})
00143 self.assertTrue(config['status'] == "OK",
00144 "Operation failed: " + config['errmsg'])
00145 rospy.loginfo("Max txpower level on 2.4GHz is: %d dbm", config['txpower'])
00146
00147 config = self.dyn_ap5.update_configuration({"txpower": -1})
00148 self.assertTrue(config['status'] == "OK",
00149 "Operation failed: " + config['errmsg'])
00150 rospy.loginfo("Min txpower level on 5GHz is: %d dbm", config['txpower'])
00151
00152 def test_linksys_security(self):
00153 config = self.dyn_ap5.update_configuration({"enabled": True, "mode": "a", "ieee80211n": False, "bitrate": 0, "wmm": False,
00154 "freq": IEEE80211_Channels.get_freq(153, IEEE80211_Channels.BAND_5000_MHz),
00155 "encryption_mode": "open", "encryption_pass": ""})
00156 self.assertTrue(config['status'] == "OK",
00157 "Operation failed: " + config['errmsg'])
00158 config = self.dyn_ap24.update_configuration({"enabled": True, "mode": "g", "ieee80211n": False, "bitrate": 0, "wmm": False,
00159 "freq": IEEE80211_Channels.get_freq(9, IEEE80211_Channels.BAND_2400_MHz),
00160 "encryption_mode": "open", "encryption_pass": ""})
00161 self.assertTrue(config['status'] == "OK",
00162 "Operation failed: " + config['errmsg'])
00163 config = self.dyn_ap24.update_configuration({"encryption_mode": "wpa2", "encryption_pass": "mypassword24"})
00164 self.assertTrue(config['status'] == "OK",
00165 "Operation failed: " + config['errmsg'])
00166 config = self.dyn_ap5.update_configuration({"encryption_mode": "wep", "encryption_pass": "9876543210"})
00167 self.assertTrue(config['status'] == "OK",
00168 "Operation failed: " + config['errmsg'])
00169 config = self.dyn_ap5.update_configuration({"wmm": True})
00170 self.assertTrue(config['status'] == "OK",
00171 "Operation failed: " + config['errmsg'])
00172 self.assertTrue(config['encryption_mode'] == "wep",
00173 "Wrong encryption mode: " + config['encryption_mode'])
00174 config = self.dyn_ap24.update_configuration({"wmm": True})
00175 self.assertTrue(config['status'] == "OK",
00176 "Operation failed: " + config['errmsg'])
00177 self.assertTrue(config['encryption_mode'] == "wpa2",
00178 "Wrong encryption mode: " + config['encryption_mode'])
00179
00180 if __name__ == '__main__':
00181 try:
00182 rostest.run('network_control_tests', 'linksys_test', LinksysTest)
00183 except KeyboardInterrupt, e:
00184 pass