2 * Copyright (c) 2015 Apple Inc. All Rights Reserved.
4 * @APPLE_LICENSE_HEADER_START@
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. Please obtain a copy of the License at
10 * http://www.opensource.apple.com/apsl/ and read it before using this
13 * The Original Code and all software distributed under the License are
14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18 * Please see the License for the specific language governing rights and
19 * limitations under the License.
21 * @APPLE_LICENSE_HEADER_END@
25 #include <SOSCircle/Regressions/SOSTestDevice.h>
26 #include "secd_regressions.h"
27 #include "SecdTestKeychainUtilities.h"
29 static int kTestTestCount
= 646;
31 // Add 1000 items on each device. Then delete 1000 items on each device.
32 static void beer_servers(void) {
33 __block
int iteration
=0;
34 __block
int objectix
=0;
35 __block CFMutableArrayRef objectNames
= CFArrayCreateMutable(kCFAllocatorDefault
, 0, &kCFTypeArrayCallBacks
);
36 const size_t itemDataSize
= 1024;
37 const int peerCount
= 4;
38 const int edgeCount
= peerCount
* (peerCount
- 1);
39 const int itemsPerPeer
= 1000;
40 const int itemsPerIteration
= 100;
41 const int itemChunkCount
= (itemsPerPeer
/ itemsPerIteration
);
42 const int deleteIteration
= edgeCount
* (itemChunkCount
+ 30);
43 const int idleIteration
= 616; //deleteIteration + edgeCount * (itemChunkCount + 10);
45 CFMutableDataRef itemData
= CFDataCreateMutable(kCFAllocatorDefault
, itemDataSize
);
46 CFDataSetLength(itemData
, itemDataSize
);
47 SOSTestDeviceListTestSync("beer_servers", test_directive
, test_reason
, 0, false, ^bool(SOSTestDeviceRef source
, SOSTestDeviceRef dest
) {
49 if (iteration
<= edgeCount
* itemChunkCount
) {
50 if (iteration
% (peerCount
- 1) == 0) {
51 for (int j
= 0; j
< itemsPerIteration
; ++j
) {
52 CFStringRef name
= CFStringCreateWithFormat(NULL
, NULL
, CFSTR("%@-pre-%d"), SOSTestDeviceGetID(source
), objectix
++);
53 CFArrayAppendValue(objectNames
, name
);
54 SOSTestDeviceAddGenericItemWithData(source
, name
, name
, itemData
);
59 } else if (iteration
== deleteIteration
) {
60 //diag("deletion starting");
61 } else if (deleteIteration
< iteration
&& iteration
<= deleteIteration
+ edgeCount
* itemChunkCount
) {
62 if (iteration
% (peerCount
- 1) == 0) {
63 for (int j
= 0; j
< itemsPerIteration
; ++j
) {
64 CFStringRef name
= CFArrayGetValueAtIndex(objectNames
, --objectix
);
65 SOSTestDeviceAddGenericItemTombstone(source
, name
, name
);
69 } else if (idleIteration
== iteration
) {
70 //diag("idle starting");
71 } else if (617 == iteration
) {
72 //diag("interesting");
75 return result
|| iteration
< deleteIteration
;
76 }, ^bool(SOSTestDeviceRef source
, SOSTestDeviceRef dest
, SOSMessageRef message
) {
78 }, CFSTR("becks"), CFSTR("corona"), CFSTR("heineken"), CFSTR("spaten"), NULL
);
79 CFRelease(objectNames
);
83 int secd_74_engine_beer_servers(int argc
, char *const *argv
)
85 plan_tests(kTestTestCount
);
87 /* custom keychain dir */
88 secd_test_setup_temp_keychain(__FUNCTION__
, NULL
);