Ejemplo n.º 1
0
class StandardServerConfigTests(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        print "PLEASE MAKE SURE THE SERVER IS NOT ALREADY RUNNING!"
        print "Note: this test run will start and stop the server for each test case, this may take a minute or two...\n"

    def setUp(self):
        self.startServer()
        self.client = Client(('localhost', 11211))

    def tearDown(self):
        self.killServer()

    def startServer(self):
        FNULL = open(os.devnull, 'w')
        path = os.path.dirname(os.path.realpath(__file__))
        proc = subprocess.Popen(["java", "-jar", path+"/../bin/mcsvr.jar"],
                                stdout=FNULL, stderr=subprocess.STDOUT)
        self.server_pid = proc.pid
        time.sleep(3)

    def killServer(self):
        time.sleep(1)
        os.kill(int(self.server_pid), signal.SIGTERM)

    def testGetSingle(self):
        self.client.set('first_key', 'first_value', 0, False)
        res = self.client.get('first_key')
        self.assertEqual(res, "first_value")

    def testGetMany(self):
        self.client.set('first_key', 'first_value', 0, False)
        self.client.set('second_key', 'second_value', 0, True)
        res = self.client.get_many(['first_key', 'second_key'])
        self.assertEqual(res["first_key"], "first_value")
        self.assertEqual(res["second_key"], "second_value")

    def testGetExpired(self):
        self.client.set('first_key', 'first_value', 0, False)
        self.client.set('first_key', 'first_value', 2, False)
        self.client.get_many(['first_key', 'second_key'])
        time.sleep(3)
        self.assertEqual(None, self.client.get('first_key'))

    def testGetDeleted(self):
        self.client.set('first_key', 'first_value', 0, False)
        res = self.client.get('first_key')
        self.assertEqual('first_value', res)
        self.client.delete('first_key')
        res = self.client.get('first_key')
        self.assertEqual(None, res)

    def testUpdateExpired(self):
        self.client.set('first_key', 'first_value', 2, False)
        time.sleep(3)
        self.client.set('first_key', 'second_value', 0, False)
        res = self.client.get('first_key')
        self.assertEqual('second_value', res)

    def testCaseUpdateOk(self):
        self.client.set('first_key', 'first_value', 0, False)
        res = self.client.gets('first_key')
        res = self.client.cas('first_key', 'second_value', res[1], 0, False)
        self.assertTrue(res)
        res = self.client.get('first_key')
        self.assertEqual('second_value', res)

    def testCaseUpdateInvalidUniq(self):
        self.client.set('first_key', 'first_value', 0, False)
        res = self.client.gets('first_key')
        casUniq = res[1]
        self.client.set('first_key', 'second_value', 0, False)
        res = self.client.cas('first_key', 'third_value', casUniq, 0, False)
        self.assertFalse(res)
        res = self.client.get('first_key')
        self.assertEqual('second_value', res)

    def testCaseUpdateNotOkOnExpired(self):
        self.client.set('first_key', 'first_value', 2, False)
        res = self.client.gets('first_key')
        time.sleep(3)
        res = self.client.cas('first_key', 'second_value', res[1], 0, False)
        self.assertEqual(None, res)

    def testCaseUpdateNotOkOnMissing(self):
        self.client.set('first_key', 'first_value', 0, False)
        res = self.client.gets('first_key')
        casUniq = res[1]
        self.client.delete('first_key')
        res = self.client.cas('first_key', 'second_value', casUniq, 0, False)
        self.assertEqual(None, res)