[1198] | 1 | import unittest
|
---|
| 2 |
|
---|
| 3 | import os
|
---|
| 4 | import sys
|
---|
| 5 | import inspect
|
---|
| 6 |
|
---|
| 7 | currentdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
|
---|
| 8 | parentdir = os.path.dirname(currentdir)
|
---|
| 9 | parentdir = os.path.dirname(parentdir)
|
---|
| 10 | sys.path.insert(0, parentdir)
|
---|
| 11 |
|
---|
| 12 | from gui.framsutils.FramsSocket import FramsSocket
|
---|
| 13 |
|
---|
| 14 | class SocketTest(unittest.TestCase):
|
---|
| 15 | # Make sure to launch an empty server, without any running jobs etc.
|
---|
| 16 | ADDRESS = "127.0.0.1"
|
---|
| 17 | PORT = 9009
|
---|
| 18 |
|
---|
| 19 | def test_connection(self):
|
---|
| 20 | frams = FramsSocket()
|
---|
| 21 |
|
---|
| 22 | try:
|
---|
| 23 | frams.initConnection(self.ADDRESS, self.PORT)
|
---|
| 24 | self.assertTrue(frams.comm.client.connected, "Connection inner state")
|
---|
| 25 | except ConnectionError:
|
---|
| 26 | self.assertTrue(False, "ConnectionError exception")
|
---|
| 27 |
|
---|
| 28 | frams.closeConnection()
|
---|
| 29 |
|
---|
| 30 | def test_communication_parsing1(self):
|
---|
| 31 | frams = FramsSocket()
|
---|
| 32 | frams.initConnection(self.ADDRESS, self.PORT)
|
---|
| 33 |
|
---|
| 34 | response = frams.sendRequest("get / motd")
|
---|
| 35 | data = frams._infoParser(response)
|
---|
| 36 | frams.closeConnection()
|
---|
| 37 |
|
---|
| 38 | self.assertEqual(len(data), 1, "Response is to short")
|
---|
| 39 | self.assertEqual(data[0].p["_classname"], "Server")
|
---|
| 40 | self.assertIn("motd", data[0].p) #check if contains motd field
|
---|
| 41 | self.assertIsInstance(data[0].p["motd"], str) #check if response have a corect type
|
---|
| 42 |
|
---|
| 43 | def test_communication_parsing2(self):
|
---|
| 44 | frams = FramsSocket()
|
---|
| 45 | frams.initConnection(self.ADDRESS, self.PORT)
|
---|
| 46 |
|
---|
| 47 | response = frams.sendRequest("get /simulator{version_string,version_int}")
|
---|
| 48 | data = frams._infoParser(response)
|
---|
| 49 | frams.closeConnection()
|
---|
| 50 |
|
---|
| 51 | self.assertEqual(len(data), 1, "Response is to short")
|
---|
| 52 | self.assertEqual(data[0].p["_classname"], "Simulator")
|
---|
| 53 | self.assertIn("version_string", data[0].p) #check if contains motd field
|
---|
| 54 | self.assertIsInstance(data[0].p["version_string"], str) #check if response have a corect type
|
---|
| 55 | self.assertIn("version_int", data[0].p) #check if contains motd field
|
---|
| 56 | self.assertIsInstance(data[0].p["version_int"], int) #check if response have a corect type
|
---|
| 57 |
|
---|
| 58 | def test_genotype_mod(self):
|
---|
| 59 | frams = FramsSocket()
|
---|
| 60 | frams.initConnection(self.ADDRESS, self.PORT)
|
---|
| 61 |
|
---|
| 62 | genotype = "X"
|
---|
| 63 | info = "test info"
|
---|
| 64 |
|
---|
| 65 | frams.sendRequest("call /simulator/genepools/groups/0 clear")
|
---|
| 66 | frams.sendRequest("call /simulator/genepools/groups/0 add {}".format(genotype))
|
---|
| 67 | genotypeInfo = frams.readGenotypeInfo(0, 0)
|
---|
| 68 | prop = next((p for p in genotypeInfo if p.p["id"] == "genotype"), None)
|
---|
| 69 | self.assertTrue(prop, "genotype property not found")
|
---|
| 70 | self.assertEqual(prop.p["value"], genotype, "genotype not match")
|
---|
| 71 |
|
---|
| 72 | frams.sendRequest("set /simulator/genepools/groups/0/genotypes/0 info \"{}\"".format(info))
|
---|
| 73 | genotypeInfo = frams.readGenotypeInfo(0, 0)
|
---|
| 74 | prop = next((p for p in genotypeInfo if p.p["id"] == "info"), None)
|
---|
| 75 | self.assertTrue(prop, "info property not found")
|
---|
| 76 | self.assertEqual(prop.p["value"], info, "info not match")
|
---|
| 77 |
|
---|
| 78 | frams.sendRequest("call /simulator/genepools/groups/0/genotypes/0 delete")
|
---|
| 79 |
|
---|
| 80 | frams.closeConnection()
|
---|
| 81 |
|
---|
| 82 | def test_multiline_strings(self):
|
---|
| 83 | frams = FramsSocket()
|
---|
| 84 | frams.initConnection(self.ADDRESS, self.PORT)
|
---|
| 85 |
|
---|
| 86 | info = r"test\ntest2"
|
---|
| 87 | infoResponse = "test\ntest2"
|
---|
| 88 |
|
---|
| 89 | #prepare known multiline field
|
---|
| 90 | frams.sendRequest("call /simulator/genepools/groups/0 clear")
|
---|
| 91 | frams.sendRequest("call /simulator/genepools/groups/0 add {}".format("X"))
|
---|
| 92 |
|
---|
| 93 | #set and get multiline field
|
---|
| 94 | frams.sendRequest("set /simulator/genepools/groups/0/genotypes/0 info \"{}\"".format(info))
|
---|
| 95 | genotypeInfo = frams.readGenotypeInfo(0, 0)
|
---|
| 96 | prop = next((p for p in genotypeInfo if p.p["id"] == "info"), None)
|
---|
| 97 | self.assertTrue(prop, "info property not found")
|
---|
| 98 | self.assertMultiLineEqual(prop.p["value"], infoResponse, "multiline string not match")
|
---|
| 99 |
|
---|
| 100 | frams.sendRequest("call /simulator/genepools/groups/0/genotypes/0 delete")
|
---|
| 101 |
|
---|
| 102 | frams.closeConnection()
|
---|
| 103 |
|
---|
| 104 | def test_multiline_string_encoding(self):
|
---|
| 105 | import gui.framsutils.framsProperty as framsProperty
|
---|
| 106 |
|
---|
| 107 | frams = FramsSocket()
|
---|
| 108 | frams.initConnection(self.ADDRESS, self.PORT)
|
---|
| 109 |
|
---|
| 110 | #prepare known multiline field
|
---|
| 111 | frams.sendRequest("call /simulator/genepools/groups/0 clear")
|
---|
| 112 | frams.sendRequest("call /simulator/genepools/groups/0 add {}".format("X"))
|
---|
| 113 |
|
---|
| 114 | info = \
|
---|
| 115 | r"Long multiline text\
|
---|
| 116 | 1\\~\
|
---|
| 117 | 22\~\n\
|
---|
| 118 | 333\ \\\
|
---|
| 119 | 4444"
|
---|
| 120 | encodedInfo = framsProperty.encodeString(info)
|
---|
| 121 |
|
---|
| 122 | frams.sendRequest("set /simulator/genepools/groups/0/genotypes/0 info \"{}\"".format(encodedInfo))
|
---|
| 123 | genotypeInfo = frams.readGenotypeInfo(0, 0)
|
---|
| 124 | prop = next((p for p in genotypeInfo if p.p["id"] == "info"), None)
|
---|
| 125 | self.assertTrue(prop, "info property not found")
|
---|
| 126 | self.assertMultiLineEqual(prop.p["value"], info, "encoded string not match")
|
---|
| 127 |
|
---|
| 128 | frams.sendRequest("call /simulator/genepools/groups/0/genotypes/0 delete")
|
---|
| 129 |
|
---|
| 130 | frams.closeConnection()
|
---|
| 131 |
|
---|
| 132 | if __name__ == "__main__":
|
---|
| 133 | unittest.main() |
---|