Exemplo n.º 1
0
    TEST_F(CTestInterfaceBase, put_test_case_09)
    {
	    data_entry key1;
	    data_entry value1;
	    data_entry key2;
	    data_entry value2;
	    
	    data_entry* p = 0;
	    
	    string key_str1 = "test01key";
	    string key_str2 = "test02key";
	    string val_str1 = "test01val";
	    string val_str2 = "test02val";
	   
	    key1.set_data(key_str1.c_str(), key_str1.size());
	    value1.set_data(val_str1.c_str(), val_str1.size());
	
	    key2.set_data(key_str1.c_str(), key_str1.size());
	    value2.set_data(val_str1.c_str(), val_str1.size());

	    int ret = 0;

	    DO_WITH_RETRY(client_handle.put(1, key1, value1, 0, 0), ret, TAIR_RETURN_SUCCESS);
	    ASSERT_EQ(TAIR_RETURN_SUCCESS, ret);

	    DO_WITH_RETRY(client_handle.put(2, key2, value1, 0, 0), ret, TAIR_RETURN_SUCCESS);
	    ASSERT_EQ(TAIR_RETURN_SUCCESS, ret);

        DO_WITH_RETRY(client_handle.put(1, key2, value2, 5, 0), ret, TAIR_RETURN_SUCCESS);
	    ASSERT_EQ(TAIR_RETURN_SUCCESS, ret);

	    DO_WITH_RETRY(client_handle.get(1, key2, p), ret, TAIR_RETURN_SUCCESS);
	    ASSERT_EQ(TAIR_RETURN_SUCCESS, ret);
	    ASSERT_EQ(true,compareDataValue(value2, *p));
	    int version = p->get_version();
	    delete p;
	    p=0;
	    
	    ret = client_handle.put(1, key2, value1, 6, version + 3 );
	    ASSERT_NE(TAIR_RETURN_SUCCESS, ret);

	    DO_WITH_RETRY(client_handle.get(1, key2, p), ret, TAIR_RETURN_SUCCESS);
	    ASSERT_EQ(TAIR_RETURN_SUCCESS, ret);
	    ASSERT_EQ(true,compareDataValue(value2, *p));
	    ASSERT_EQ(version , p->get_version());
	    ASSERT_EQ(5, p->data_meta.edate);
	    delete p;
	    p=0;
	   
	   
	    ret = client_handle.remove(1, key1);
	    ASSERT_EQ(TAIR_RETURN_SUCCESS,ret);
	   
	    ret = client_handle.remove(2, key2);
	    ASSERT_EQ(TAIR_RETURN_SUCCESS,ret);

	    ret = client_handle.remove(1, key2);
	    ASSERT_EQ(TAIR_RETURN_SUCCESS,ret);
    };
	 TEST_F(CTestInterfaceBase, GetTestCase_07_dateNotExpire) {
	 	data_entry key1("04_07_key_01");
        data_entry value1("04_07_data_01");
        
        data_entry key2("04_07_key_02");
        data_entry value2("04_07_data_02");

        data_entry value3("04_07_data_03");

        data_entry* p;
        int ret = 0;
		//data1:area equals,key not equal
		DO_WITH_RETRY(client_handle.put(1, key1, value1, 0, 0), ret, TAIR_RETURN_SUCCESS);
		ASSERT_EQ(TAIR_RETURN_SUCCESS, ret);
		
		//data2:area not equas, key equal
		DO_WITH_RETRY(client_handle.put(2, key2, value2, 0, 0), ret, TAIR_RETURN_SUCCESS);
		ASSERT_EQ(TAIR_RETURN_SUCCESS, ret);

		DO_WITH_RETRY(client_handle.put(1, key2, value3, 3, 0), ret, TAIR_RETURN_SUCCESS);
		ASSERT_EQ(TAIR_RETURN_SUCCESS, ret);

		ret = client_handle.get(1, key2, p);
		ASSERT_EQ(TAIR_RETURN_SUCCESS, ret);
        ASSERT_EQ(true, compareDataValue(value3, *p));
        delete p;
		p = NULL;

		client_handle.remove(1, key1);
		client_handle.remove(2, key2);
		client_handle.remove(1, key2);

     }
Exemplo n.º 3
0
// -----------------------------------------------------------------------
// Abstract interface from AbstractNumericValidator
// -----------------------------------------------------------------------
void DecimalDatatypeValidator::checkContent(const XMLCh*             const content
                                           ,      ValidationContext* const context
                                           ,      bool                     asBase
                                           ,      MemoryManager*     const manager)
{
    //validate against base validator if any
    DecimalDatatypeValidator *pBase = (DecimalDatatypeValidator*) this->getBaseValidator();
    if (pBase)
        pBase->checkContent(content, context, true, manager);

    int thisFacetsDefined = getFacetsDefined();

    // we check pattern first
    if ( (thisFacetsDefined & DatatypeValidator::FACET_PATTERN ) != 0 )
    {
        // lazy construction
        if (getRegex() ==0) {
            try {
                // REVISIT: cargillmem fMemoryManager vs manager
                setRegex(new (fMemoryManager) RegularExpression(getPattern(), SchemaSymbols::fgRegEx_XOption, fMemoryManager));                
            }
            catch (XMLException &e)
            {
                ThrowXMLwithMemMgr1(InvalidDatatypeValueException, XMLExcepts::RethrowError, e.getMessage(), manager);
            }
        }

        if (getRegex()->matches(content, manager) ==false)
        {
            ThrowXMLwithMemMgr2(InvalidDatatypeValueException
                    , XMLExcepts::VALUE_NotMatch_Pattern
                    , content
                    , getPattern()
                    , manager);
        }
    }

    // if this is a base validator, we only need to check pattern facet
    // all other facet were inherited by the derived type
    if (asBase)
        return;
    XMLCh *errorMsg = 0;
    try {
        XMLBigDecimal  compareDataValue(content, manager);
        XMLBigDecimal* compareData = &compareDataValue;        
        
        if (getEnumeration())
        {
            int i=0;
            int enumLength = getEnumeration()->size();
            for ( ; i < enumLength; i++)
            {
                if (compareValues(compareData, (XMLBigDecimal*) getEnumeration()->elementAt(i)) ==0 )
                    break;
            }

            if (i == enumLength)
                ThrowXMLwithMemMgr1(InvalidDatatypeValueException, XMLExcepts::VALUE_NotIn_Enumeration, content, manager);
        }

        boundsCheck(compareData, manager);

        if ( (thisFacetsDefined & DatatypeValidator::FACET_FRACTIONDIGITS) != 0 )
        {
            if ( compareData->getScale() > fFractionDigits )
            {                
                XMLCh value1[BUF_LEN+1];
                XMLCh value2[BUF_LEN+1];
                XMLString::binToText(compareData->getScale(), value1, BUF_LEN, 10, manager);
                XMLString::binToText(fFractionDigits, value2, BUF_LEN, 10, manager);
                ThrowXMLwithMemMgr3(InvalidDatatypeFacetException
                                 , XMLExcepts::VALUE_exceed_fractDigit
                                 , compareData->getRawData()
                                 , value1
                                 , value2
                                 , manager);
            }
        }

        if ( (thisFacetsDefined & DatatypeValidator::FACET_TOTALDIGITS) != 0 )
        {
            if ( compareData->getTotalDigit() > fTotalDigits )
            {                
                XMLCh value1[BUF_LEN+1];
                XMLCh value2[BUF_LEN+1];
                XMLString::binToText(compareData->getTotalDigit(), value1, BUF_LEN, 10, manager);
                XMLString::binToText(fTotalDigits, value2, BUF_LEN, 10, manager);
                ThrowXMLwithMemMgr3(InvalidDatatypeFacetException
                                 , XMLExcepts::VALUE_exceed_totalDigit
                                 , compareData->getRawData()
                                 , value1
                                 , value2
                                 , manager);
            }

            /***
             E2-44 totalDigits

             ... by restricting it to numbers that are expressible as i � 10^-n
             where i and n are integers such that |i| < 10^totalDigits and 0 <= n <= totalDigits.
            ***/

            if ( compareData->getScale() > fTotalDigits )  
            {                
                XMLCh value1[BUF_LEN+1];
                XMLCh value2[BUF_LEN+1];
                XMLString::binToText(compareData->getScale(), value1, BUF_LEN, 10, manager);
                XMLString::binToText(fTotalDigits, value2, BUF_LEN, 10, manager);
                ThrowXMLwithMemMgr3(InvalidDatatypeFacetException
                                 , XMLExcepts::VALUE_exceed_totalDigit
                                 , compareData->getRawData()
                                 , value1
                                 , value2
                                 , manager);
            }        
        }
    }
    catch (XMLException &e)
    {
       errorMsg = XMLString::replicate(e.getMessage(), manager);
    }
    if(errorMsg)
    {
       ArrayJanitor<XMLCh> jan(errorMsg, manager);
       ThrowXMLwithMemMgr1(InvalidDatatypeFacetException, XMLExcepts::RethrowError, errorMsg, manager);
    }
}
Exemplo n.º 4
0
 bool CTestInterfaceBase::compareDataValueWithMeta(const data_entry& v1, const data_entry& v2) {
     if (compareDataValue(v1,v2) == false) return false;
     return memcmp(&v1.data_meta, &v2.data_meta, sizeof(v1.data_meta)) == 0;
 }
	TEST_F(CTestInterfaceBase, incr_other_TestCase_01_mixed) {
		data_entry key("14_01_key_01");

		int area = 1;
		int count = 1;
		int initValue = 10;
		int retValue = 0;
		int ret;

		client_handle.remove(area, key);

		// step 1
		int expect = count + initValue;
		DO_WITH_RETRY(client_handle.incr(area, key, count, &retValue, initValue, 0), ret, TAIR_RETURN_SUCCESS);
		ASSERT_EQ(TAIR_RETURN_SUCCESS, ret);
		ASSERT_EQ(expect, retValue);

		// step 2
		data_entry *p;
		DO_WITH_RETRY(client_handle.get(area, key, p), ret, TAIR_RETURN_SUCCESS);
		ASSERT_EQ(TAIR_RETURN_SUCCESS, ret);
		ASSERT_EQ(1,p->get_version());
		
		DO_WITH_RETRY(client_handle.incr(area, key, 0, &retValue), ret, TAIR_RETURN_SUCCESS);
		ASSERT_EQ(TAIR_RETURN_SUCCESS, ret);
		ASSERT_EQ(expect, retValue);
		delete p;
		p = NULL;

		// step 3
        vector<int> itemList;
        for(int i=0;i<10;++i){
            itemList.push_back(i);
        }
		ret = client_handle.add_items(area, key, itemList, 0, 0);
		ASSERT_EQ(TAIR_RETURN_CANNOT_OVERRIDE, ret);
		DO_WITH_RETRY(client_handle.incr(area, key, 0, &retValue), ret, TAIR_RETURN_SUCCESS);
		ASSERT_EQ(TAIR_RETURN_SUCCESS, ret);
		ASSERT_EQ(expect, retValue);

		// step 4
        vector<int> itemResult;
        ret = client_handle.get_items(area, key, 0, 1, itemResult);
        ASSERT_EQ(TAIR_RETURN_TYPE_NOT_MATCH, ret);
		DO_WITH_RETRY(client_handle.incr(area, key, 0, &retValue), ret, TAIR_RETURN_SUCCESS);
		ASSERT_EQ(TAIR_RETURN_SUCCESS, ret);
		ASSERT_EQ(expect, retValue);

		// step 5
		itemResult.clear();
		ret = client_handle.get_and_remove(area, key, 0, 1, itemResult);
		ASSERT_EQ(TAIR_RETURN_TYPE_NOT_MATCH, ret);
		DO_WITH_RETRY(client_handle.incr(area, key, 0, &retValue), ret, TAIR_RETURN_SUCCESS);
		ASSERT_EQ(TAIR_RETURN_SUCCESS, ret);
		ASSERT_EQ(expect, retValue);

		// step 6
		ret = client_handle.remove_items(area, key, 0, 1);
		ASSERT_EQ(TAIR_RETURN_TYPE_NOT_MATCH, ret);
		DO_WITH_RETRY(client_handle.incr(area, key, 0, &retValue), ret, TAIR_RETURN_SUCCESS);
		ASSERT_EQ(TAIR_RETURN_SUCCESS, ret);
		ASSERT_EQ(expect, retValue);

		// step 7
		ret = client_handle.get_items_count(area, key);
		ASSERT_EQ(TAIR_RETURN_TYPE_NOT_MATCH, ret);
		DO_WITH_RETRY(client_handle.incr(area, key, 0, &retValue), ret, TAIR_RETURN_SUCCESS);
		ASSERT_EQ(TAIR_RETURN_SUCCESS, ret);
		ASSERT_EQ(expect, retValue);

		// step 8
		count = 1;
		expect += count;
		DO_WITH_RETRY(client_handle.incr(area, key, count, &retValue), ret, TAIR_RETURN_SUCCESS);
		ASSERT_EQ(TAIR_RETURN_SUCCESS, ret);
		ASSERT_EQ(expect, retValue);

		// step 9
		expect -= count;
		DO_WITH_RETRY(client_handle.decr(area, key, count, &retValue), ret, TAIR_RETURN_SUCCESS);
		ASSERT_EQ(TAIR_RETURN_SUCCESS, ret);
		ASSERT_EQ(expect, retValue);

		// step 10
		DO_WITH_RETRY(client_handle.remove(area, key), ret, TAIR_RETURN_SUCCESS);
		ASSERT_EQ(TAIR_RETURN_SUCCESS, ret);
		ret = client_handle.get(area, key, p);
		ASSERT_EQ(ret, TAIR_RETURN_DATA_NOT_EXIST);

		// step 11
		count = 1;
		DO_WITH_RETRY(client_handle.incr(area, key, count, &retValue), ret, TAIR_RETURN_SUCCESS);
		ASSERT_EQ(TAIR_RETURN_SUCCESS, ret);
		ASSERT_EQ(count, retValue);

		// step 12
		DO_WITH_RETRY(client_handle.put(area, key, key, 0, 0), ret, TAIR_RETURN_SUCCESS);
		ASSERT_EQ(TAIR_RETURN_SUCCESS, ret);
		DO_WITH_RETRY(client_handle.get(area, key, p), ret, TAIR_RETURN_SUCCESS);
		ASSERT_EQ(TAIR_RETURN_SUCCESS, ret);
		ASSERT_TRUE(compareDataValue(key, *p));
		ASSERT_EQ(2,p->get_version());
		delete p;
		p = NULL;

		// step 13
		ret = client_handle.incr(area, key, count, &retValue);
		ASSERT_EQ(TAIR_RETURN_CANNOT_OVERRIDE, ret);

		// step 14
		ret = client_handle.decr(area, key, count, &retValue);
		ASSERT_EQ(TAIR_RETURN_CANNOT_OVERRIDE, ret);

		// step 15
		DO_WITH_RETRY(client_handle.remove(area, key), ret, TAIR_RETURN_SUCCESS);
		ASSERT_EQ(TAIR_RETURN_SUCCESS, ret);
		ret = client_handle.get(area, key, p);
		ASSERT_EQ(TAIR_RETURN_DATA_NOT_EXIST, ret);

	};