1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 // MARKER(update_precomp.py): autogen include statement, do not remove 25 #include "precompiled_sal.hxx" 26 27 #include <math.h> 28 #include <stdio.h> 29 30 #include <rtl/uuid.h> 31 #include <rtl/ustring.h> 32 #include <rtl/ustring.hxx> 33 34 #ifdef WNT 35 #define WIN32_LEAN_AND_MEAN 36 #include <windows.h> 37 #endif 38 39 #ifdef UNX 40 #include <unistd.h> 41 #include <time.h> 42 #endif 43 44 #include "gtest/gtest.h" 45 46 using namespace rtl; 47 48 /** print a UNI_CODE String. And also print some comments of the string. 49 */ 50 inline void printUString( const ::rtl::OUString & str, const sal_Char * msg = "" ) 51 { 52 printf("#%s #printUString_u# ", msg ); 53 rtl::OString aString; 54 aString = ::rtl::OUStringToOString( str, RTL_TEXTENCODING_ASCII_US ); 55 printf("%s\n", (char *)aString.getStr( ) ); 56 } 57 58 /************************************************************************ 59 * For diagnostics( from sal/test/testuuid.cxx ) 60 ************************************************************************/ 61 62 void printUuid( sal_uInt8 *pNode ) 63 { 64 for( sal_Int32 i1 = 0 ; i1 < 4 ; i1++ ) 65 { 66 for( sal_Int32 i2 = 0 ; i2 < 4 ; i2++ ) 67 { 68 printf( "%02x" , pNode[i1*4 +i2] ); 69 } 70 if( i1 == 3 ) 71 break; 72 printf( "-" ); 73 } 74 75 printf( "\n# " ); 76 } 77 78 namespace rtl_Uuid 79 { 80 class createUuid : public ::testing::Test 81 { 82 public: 83 // initialise your test code values here. 84 void SetUp() 85 { 86 } 87 88 void TearDown() 89 { 90 } 91 92 }; // class createUuid 93 94 #define TEST_UUID 20 95 TEST_F(createUuid, createUuid_001) 96 { 97 sal_uInt8 aNode[TEST_UUID][16]; 98 sal_Int32 i,i2; 99 for( i = 0 ; i < TEST_UUID ; i ++ ) 100 { 101 rtl_createUuid( aNode[i], 0, sal_False ); 102 } 103 sal_Bool bRes = sal_True; 104 for( i = 0 ; i < TEST_UUID ; i ++ ) 105 { 106 for( i2 = i+1 ; i2 < TEST_UUID ; i2 ++ ) 107 { 108 if ( rtl_compareUuid( aNode[i] , aNode[i2] ) == 0 ) 109 { 110 bRes = sal_False; 111 break; 112 } 113 } 114 if ( bRes == sal_False ) 115 break; 116 } 117 ASSERT_TRUE(bRes == sal_True) << "createUuid: every uuid must be different."; 118 } 119 120 /* 121 TEST_F(createUuid, createUuid_002) 122 { 123 sal_uInt8 pNode[16]; 124 sal_uInt8 aNode[TEST_UUID][16]; 125 sal_Int32 i,i2; 126 for( i = 0 ; i < TEST_UUID ; i ++ ) 127 { 128 rtl_createUuid( aNode[i], pNode, sal_True ); 129 } 130 sal_Bool bRes = sal_True; 131 for( i = 0 ; i < TEST_UUID ; i ++ ) 132 { 133 //printUuid( aNode[i] ); 134 for( i2 = i+1 ; i2 < TEST_UUID ; i2 ++ ) 135 { 136 if ( rtl_compareUuid( aNode[i] , aNode[i2] ) == 0 ) 137 { 138 bRes = sal_False; 139 break; 140 } 141 } 142 if ( bRes == sal_False ) 143 break; 144 } 145 ASSERT_TRUE(bRes == sal_True) << "createUuid: every uuid must be different."; 146 }*/ 147 148 namespace ThreadHelper 149 { 150 void thread_sleep(sal_Int32 _nSec) 151 { 152 #ifdef WNT //Windows 153 Sleep(_nSec * 10 ); 154 #endif 155 #if ( defined UNX ) || ( defined OS2 ) //Unix 156 sleep( _nSec ); 157 #endif 158 } 159 } 160 161 class createNamedUuid : public ::testing::Test 162 { 163 public: 164 // initialise your test code values here. 165 void SetUp() 166 { 167 } 168 169 void TearDown() 170 { 171 } 172 }; // class createNamedUuid 173 174 TEST_F(createNamedUuid, createNamedUuid_001) 175 { 176 sal_uInt8 NameSpace_DNS[16] = RTL_UUID_NAMESPACE_DNS; 177 sal_uInt8 NameSpace_URL[16] = RTL_UUID_NAMESPACE_URL; 178 sal_uInt8 pPriorCalculatedUUID[16] = { 179 0x52,0xc9,0x30,0xa5, 180 0xd1,0x61,0x3b,0x16, 181 0x98,0xc5,0xf8,0xd1, 182 0x10,0x10,0x6d,0x4d }; 183 184 sal_uInt8 pNamedUUID[16], pNamedUUID2[16]; 185 186 // Same name does generate the same uuid 187 rtl_String *pName = 0; 188 rtl_string_newFromStr( &pName , "this is a bla.blubs.DNS-Name" ); 189 rtl_createNamedUuid( pNamedUUID , NameSpace_DNS , pName ); 190 rtl_createNamedUuid( pNamedUUID2 , NameSpace_DNS , pName ); 191 ASSERT_TRUE(! memcmp( pNamedUUID , pNamedUUID2 , 16 ) && rtl_compareUuid( pNamedUUID , pNamedUUID2 ) == 0) 192 << "Same name should generate the same uuid"; 193 ASSERT_TRUE(! memcmp( pNamedUUID , pPriorCalculatedUUID , 16 )) << "Same name should generate the same uuid"; 194 195 // Different names does not generate the same uuid 196 rtl_string_newFromStr( &pName , "this is a bla.blubs.DNS-Namf" ); 197 rtl_createNamedUuid( pNamedUUID2 , NameSpace_DNS , pName ); 198 ASSERT_TRUE(memcmp( pNamedUUID , pNamedUUID2 , 16 )) << "Different names does not generate the same uuid."; 199 200 // the same name with different namespace uuid produces different uuids 201 rtl_createNamedUuid( pNamedUUID , NameSpace_URL , pName ); 202 ASSERT_TRUE(memcmp( pNamedUUID , pNamedUUID2 , 16 ) && rtl_compareUuid( pNamedUUID , pNamedUUID2 ) != 0) 203 << " same name with different namespace uuid produces different uuids"; 204 205 //test compareUuid 206 if ( rtl_compareUuid( pNamedUUID , pNamedUUID2 ) > 0 ) 207 { ASSERT_TRUE(rtl_compareUuid( pNamedUUID2 , pNamedUUID ) < 0) << " compare uuids"; 208 } 209 else 210 ASSERT_TRUE(rtl_compareUuid( pNamedUUID2 , pNamedUUID ) > 0) << " compare uuids"; 211 212 rtl_string_release( pName ); 213 } 214 215 } // namespace rtl_Uuid 216 217 int main(int argc, char **argv) 218 { 219 ::testing::InitGoogleTest(&argc, argv); 220 return RUN_ALL_TESTS(); 221 } 222