def test_expiry_after_append(self): # create a doc and set expiry for the doc # append to the doc and check if the expiry is not changed self.key = "expiry_after_append" array = { "name": "Douglas Reynholm", "place": "India", } jsonDump = json.dumps(array) self.client.set(self.key, 60, 0, jsonDump) client1 = VBucketAwareMemcached(RestConnection(self.master), 'default') get_meta_resp_before = client1.generic_request(client1.memcached(self.key).getMeta, self.key) self.log.info("Sleeping for 5 sec") time.sleep(5) client1.generic_request(client1.memcached(self.key).append, self.key, 'appended data') get_meta_resp_after = client1.generic_request(client1.memcached(self.key).getMeta, self.key) self.assertEquals(get_meta_resp_before[2], get_meta_resp_after[2]) # 3rd value is expiry value
def test_CASnotzero(self): # MB-31149 # observe.observeseqnotests.ObserveSeqNoTests.test_CASnotzero # set value, append and check CAS value self.log.info('Starting test_CASnotzero') # without hello(mutationseqencenumber) client = VBucketAwareMemcached(RestConnection(self.master), 'default') KEY_NAME = "test1key" client.set(KEY_NAME, 0, 0, json.dumps({'value': 'value2'})) client.generic_request( client.memcached(KEY_NAME).append, 'test1key', 'appended data') get_meta_resp = client.generic_request( client.memcached(KEY_NAME).getMeta, 'test1key') self.log.info( 'the CAS value without hello(mutationseqencenumber): {} '.format( get_meta_resp[4])) self.assertNotEqual(get_meta_resp[4], 0) # with hello(mutationseqencenumber) KEY_NAME = "test2key" client.set(KEY_NAME, 0, 0, json.dumps({'value': 'value1'})) h = client.sendHellos( memcacheConstants.PROTOCOL_BINARY_FEATURE_MUTATION_SEQNO) client.generic_request( client.memcached(KEY_NAME).append, 'test2key', 'appended data456') get_meta_resp = client.generic_request( client.memcached(KEY_NAME).getMeta, 'test2key') self.log.info( 'the CAS value with hello(mutationseqencenumber): {} '.format( get_meta_resp[4])) self.assertNotEqual(get_meta_resp[4], 0)
def test_new_response_fields(self): self.log.info('\n\nStarting test_new_response_fields') client = VBucketAwareMemcached(RestConnection(self.master), 'default') h = client.sendHellos( memcacheConstants.PROTOCOL_BINARY_FEATURE_MUTATION_SEQNO) set_resp = self.extract_vbucket_uuid_and_seqno( client.set('test1key', 0, 0, '123456789')) # test the inplace operations test = client.generic_request( client.memcached('test1key').set, 'test1key', 0, 0, 'totally new value') replace_resp = self.extract_vbucket_uuid_and_seqno( client.generic_request( client.memcached('test1key').replace, 'test1key', 0, 0, 'totally new value')) self.verify_vbucket_and_seqno(set_resp, replace_resp, 'replace') append_resp = self.extract_vbucket_uuid_and_seqno( client.generic_request( client.memcached('test1key').append, 'test1key', 'appended data')) self.verify_vbucket_and_seqno(replace_resp, append_resp, 'append') prepend_resp = self.extract_vbucket_uuid_and_seqno( client.generic_request( client.memcached('test1key').prepend, 'test1key', 'prepended data')) self.verify_vbucket_and_seqno(append_resp, prepend_resp, 'prepend') # and finally do the delete delete_resp = self.extract_vbucket_uuid_and_seqno( client.generic_request( client.memcached('test1key').delete, 'test1key')) self.verify_vbucket_and_seqno(set_resp, delete_resp, 'delete') #meta commands under construction # test the 'meta' commands TEST_SEQNO = 123 TEST_CAS = 456 set_with_meta_resp = client.generic_request( client.memcached('test1keyformeta').set_with_meta, 'test1keyformeta', 0, 0, TEST_SEQNO, TEST_CAS, '123456789') set_meta_vbucket_uuid, set_meta_seqno = struct.unpack( '>QQ', set_with_meta_resp[2]) set_with_meta_dict = { 'vbucket_uuid': set_meta_vbucket_uuid, 'seqno': set_meta_seqno } get_meta_resp = client.generic_request( client.memcached('test1keyformeta').getMeta, 'test1keyformeta') self.assertTrue(TEST_SEQNO == get_meta_resp[3], \ msg='get meta seqno does not match as set. Expected {0}, actual {1}'.format(TEST_SEQNO, get_meta_resp[3]) ) self.assertTrue(TEST_CAS == get_meta_resp[4], \ msg='get meta cas does not match as set. Expected {0}, actual {1}'.format(TEST_CAS, get_meta_resp[4]) ) # def del_with_meta(self, key, exp, flags, seqno, old_cas, new_cas, vbucket= -1): del_with_meta_resp = client.generic_request( client.memcached('test1keyformeta').del_with_meta, 'test1keyformeta', 0, 0, TEST_SEQNO, TEST_CAS, TEST_CAS + 1) vbucket_uuid, seqno = struct.unpack('>QQ', del_with_meta_resp[2]) del_with_meta_dict = {'vbucket_uuid': vbucket_uuid, 'seqno': seqno} self.verify_vbucket_and_seqno(set_with_meta_dict, del_with_meta_dict, 'set/del with meta') # do some integer operations set_resp = self.extract_vbucket_uuid_and_seqno( client.set('key-for-integer-value', 0, 0, '123')) incr_resp = client.generic_request( client.memcached('key-for-integer-value').incr, 'key-for-integer-value') incr_resp_dict = {'vbucket_uuid': incr_resp[2], 'seqno': incr_resp[3]} self.verify_vbucket_and_seqno(set_resp, incr_resp_dict, 'incr') decr_resp = client.generic_request( client.memcached('key-for-integer-value').decr, 'key-for-integer-value') decr_resp_dict = {'vbucket_uuid': decr_resp[2], 'seqno': decr_resp[3]} self.verify_vbucket_and_seqno(incr_resp_dict, decr_resp_dict, 'decr') add_resp = self.extract_vbucket_uuid_and_seqno( client.generic_request( client.memcached('totally new key').add, 'totally new key', 0, 0, 'totally new value')) self.assertTrue(add_resp['vbucket_uuid'] > 0, msg='Add request vbucket uuid is zero') self.log.info('\n\nComplete test_new_response_fields\n\n')
def test_appendprepend(self): # MB-32078, Append with CAS=0 can return ENGINE_KEY_EEXISTS # observe.observeseqnotests.ObserveSeqNoTests.test_appendprepend self.log.info('Starting test_appendprepend') TEST_SEQNO = 123 TEST_CAS = 456 KEY_NAME = 'test_appendprepend' client = VBucketAwareMemcached(RestConnection(self.master), 'default') # create a value with CAS client.generic_request( client.memcached(KEY_NAME).set_with_meta, KEY_NAME, 0, 0, TEST_SEQNO, TEST_CAS, '123456789') get_resp = client.generic_request( client.memcached(KEY_NAME).get, KEY_NAME) self.assertEqual(get_resp[2], '123456789') # check if the changing the value fails try: client.generic_request( client.memcached(KEY_NAME).set_with_meta, KEY_NAME, 0, 0, 0, 0, 'value') self.fail('Expected to fail but passed') except MemcachedError as exp: self.assertEqual(int(exp.status), 2) # check if append works fine client.generic_request( client.memcached(KEY_NAME).append, KEY_NAME, 'appended data') get_resp = client.generic_request( client.memcached(KEY_NAME).get, KEY_NAME) self.assertEqual(get_resp[2], '123456789appended data') # check if prepend works fine and verify the data client.generic_request( client.memcached(KEY_NAME).prepend, KEY_NAME, 'prepended data') get_resp = client.generic_request( client.memcached(KEY_NAME).get, KEY_NAME) self.assertEqual(get_resp[2], 'prepended data123456789appended data')
def test_new_response_fields(self): self.log.info('\n\nStarting test_new_response_fields') client = VBucketAwareMemcached(RestConnection(self.master), 'default') h = client.sendHellos( memcacheConstants.PROTOCOL_BINARY_FEATURE_MUTATION_SEQNO ); set_resp = self.extract_vbucket_uuid_and_seqno( client.set('test1key', 0, 0, '123456789') ) # test the inplace operations test = client.generic_request(client.memcached('test1key').set, 'test1key', 0, 0,'totally new value') replace_resp = self.extract_vbucket_uuid_and_seqno( client.generic_request( client.memcached('test1key').replace, 'test1key', 0, 0,'totally new value') ) self.verify_vbucket_and_seqno( set_resp, replace_resp, 'replace') append_resp = self.extract_vbucket_uuid_and_seqno( client.generic_request( client.memcached('test1key').append, 'test1key', 'appended data') ) self.verify_vbucket_and_seqno(replace_resp, append_resp, 'append') prepend_resp = self.extract_vbucket_uuid_and_seqno( client.generic_request( client.memcached('test1key').prepend, 'test1key', 'prepended data') ) self.verify_vbucket_and_seqno(append_resp, prepend_resp, 'prepend') # and finally do the delete delete_resp = self.extract_vbucket_uuid_and_seqno( client.generic_request( client.memcached('test1key').delete,'test1key') ) self.verify_vbucket_and_seqno( set_resp, delete_resp, 'delete') #meta commands under construction # test the 'meta' commands TEST_SEQNO = 123 TEST_CAS = 456 set_with_meta_resp = client.generic_request( client.memcached('test1keyformeta').set_with_meta, 'test1keyformeta', 0, 0, TEST_SEQNO, TEST_CAS, '123456789') set_meta_vbucket_uuid, set_meta_seqno = struct.unpack('>QQ', set_with_meta_resp[2]) set_with_meta_dict = {'vbucket_uuid':set_meta_vbucket_uuid, 'seqno': set_meta_seqno} get_meta_resp = client.generic_request(client.memcached( 'test1keyformeta').getMeta, 'test1keyformeta') self.assertTrue(TEST_SEQNO == get_meta_resp[3], \ msg='get meta seqno does not match as set. Expected {0}, actual {1}'.format(TEST_SEQNO,get_meta_resp[3]) ) self.assertTrue(TEST_CAS == get_meta_resp[4], \ msg='get meta cas does not match as set. Expected {0}, actual {1}'.format(TEST_CAS,get_meta_resp[4]) ) # def del_with_meta(self, key, exp, flags, seqno, old_cas, new_cas, vbucket= -1): del_with_meta_resp = client.generic_request( client.memcached('test1keyformeta').del_with_meta,'test1keyformeta', 0, 0, TEST_SEQNO, TEST_CAS, TEST_CAS+1) vbucket_uuid, seqno = struct.unpack('>QQ', del_with_meta_resp[2]) del_with_meta_dict = {'vbucket_uuid':vbucket_uuid, 'seqno': seqno} self.verify_vbucket_and_seqno( set_with_meta_dict, del_with_meta_dict, 'set/del with meta') # do some integer operations set_resp = self.extract_vbucket_uuid_and_seqno( client.set('key-for-integer-value', 0, 0, '123') ) incr_resp = client.generic_request(client.memcached('key-for-integer-value').incr, 'key-for-integer-value') incr_resp_dict = {'vbucket_uuid':incr_resp[2], 'seqno':incr_resp[3]} self.verify_vbucket_and_seqno(set_resp, incr_resp_dict, 'incr') decr_resp = client.generic_request(client.memcached('key-for-integer-value').decr,'key-for-integer-value') decr_resp_dict = {'vbucket_uuid':decr_resp[2], 'seqno':decr_resp[3]} self.verify_vbucket_and_seqno(incr_resp_dict, decr_resp_dict, 'decr') add_resp = self.extract_vbucket_uuid_and_seqno( client.generic_request( client.memcached('totally new key').add, 'totally new key', 0, 0,'totally new value') ) self.assertTrue( add_resp['vbucket_uuid'] > 0, msg='Add request vbucket uuid is zero') self.log.info('\n\nComplete test_new_response_fields\n\n')