mirror of https://github.com/grpc/grpc.git
commit
aaa03d74ce
98 changed files with 9725 additions and 718 deletions
@ -0,0 +1,17 @@ |
||||
{ |
||||
"name": "grpc/grpc", |
||||
"type": "library", |
||||
"description": "gRPC library for PHP", |
||||
"keywords": ["rpc"], |
||||
"homepage": "http://grpc.io", |
||||
"license": "BSD-3-Clause", |
||||
"require": { |
||||
"php": ">=5.5.0", |
||||
"google/auth": "dev-master" |
||||
}, |
||||
"autoload": { |
||||
"psr-4": { |
||||
"Grpc\\": "src/php/lib/Grpc/" |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,101 @@ |
||||
/*
|
||||
* |
||||
* Copyright 2015, Google Inc. |
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without |
||||
* modification, are permitted provided that the following conditions are |
||||
* met: |
||||
* |
||||
* * Redistributions of source code must retain the above copyright |
||||
* notice, this list of conditions and the following disclaimer. |
||||
* * Redistributions in binary form must reproduce the above |
||||
* copyright notice, this list of conditions and the following disclaimer |
||||
* in the documentation and/or other materials provided with the |
||||
* distribution. |
||||
* * Neither the name of Google Inc. nor the names of its |
||||
* contributors may be used to endorse or promote products derived from |
||||
* this software without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
* |
||||
*/ |
||||
|
||||
#include "src/core/security/credentials.h" |
||||
|
||||
#include <grpc/support/alloc.h> |
||||
|
||||
#include <string.h> |
||||
|
||||
static void store_ensure_capacity(grpc_credentials_md_store *store) { |
||||
if (store->num_entries == store->allocated) { |
||||
store->allocated = (store->allocated == 0) ? 1 : store->allocated * 2; |
||||
store->entries = gpr_realloc( |
||||
store->entries, store->allocated * sizeof(grpc_credentials_md)); |
||||
} |
||||
} |
||||
|
||||
grpc_credentials_md_store *grpc_credentials_md_store_create( |
||||
size_t initial_capacity) { |
||||
grpc_credentials_md_store *store = gpr_malloc(sizeof(grpc_credentials_md_store)); |
||||
memset(store, 0, sizeof(grpc_credentials_md_store)); |
||||
if (initial_capacity > 0) { |
||||
store->entries = gpr_malloc(initial_capacity * sizeof(grpc_credentials_md)); |
||||
store->allocated = initial_capacity; |
||||
} |
||||
gpr_ref_init(&store->refcount, 1); |
||||
return store; |
||||
} |
||||
|
||||
void grpc_credentials_md_store_add(grpc_credentials_md_store *store, |
||||
gpr_slice key, gpr_slice value) { |
||||
if (store == NULL) return; |
||||
store_ensure_capacity(store); |
||||
store->entries[store->num_entries].key = gpr_slice_ref(key); |
||||
store->entries[store->num_entries].value = gpr_slice_ref(value); |
||||
store->num_entries++; |
||||
} |
||||
|
||||
void grpc_credentials_md_store_add_cstrings(grpc_credentials_md_store *store, |
||||
const char *key, |
||||
const char *value) { |
||||
if (store == NULL) return; |
||||
store_ensure_capacity(store); |
||||
store->entries[store->num_entries].key = gpr_slice_from_copied_string(key); |
||||
store->entries[store->num_entries].value = |
||||
gpr_slice_from_copied_string(value); |
||||
store->num_entries++; |
||||
} |
||||
|
||||
grpc_credentials_md_store *grpc_credentials_md_store_ref( |
||||
grpc_credentials_md_store *store) { |
||||
if (store == NULL) return NULL; |
||||
gpr_ref(&store->refcount); |
||||
return store; |
||||
} |
||||
|
||||
void grpc_credentials_md_store_unref(grpc_credentials_md_store *store) { |
||||
if (store == NULL) return; |
||||
if (gpr_unref(&store->refcount)) { |
||||
if (store->entries != NULL) { |
||||
size_t i; |
||||
for (i = 0; i < store->num_entries; i++) { |
||||
gpr_slice_unref(store->entries[i].key); |
||||
gpr_slice_unref(store->entries[i].value); |
||||
} |
||||
gpr_free(store->entries); |
||||
} |
||||
gpr_free(store); |
||||
} |
||||
} |
||||
|
@ -0,0 +1,128 @@ |
||||
/*
|
||||
* |
||||
* Copyright 2015, Google Inc. |
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without |
||||
* modification, are permitted provided that the following conditions are |
||||
* met: |
||||
* |
||||
* * Redistributions of source code must retain the above copyright |
||||
* notice, this list of conditions and the following disclaimer. |
||||
* * Redistributions in binary form must reproduce the above |
||||
* copyright notice, this list of conditions and the following disclaimer |
||||
* in the documentation and/or other materials provided with the |
||||
* distribution. |
||||
* * Neither the name of Google Inc. nor the names of its |
||||
* contributors may be used to endorse or promote products derived from |
||||
* this software without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
* |
||||
*/ |
||||
|
||||
#include "src/core/security/auth_filters.h" |
||||
#include "src/core/security/security_connector.h" |
||||
#include "src/core/security/security_context.h" |
||||
|
||||
#include <grpc/support/log.h> |
||||
|
||||
typedef struct call_data { |
||||
int unused; /* C89 requires at least one struct element */ |
||||
} call_data; |
||||
|
||||
typedef struct channel_data { |
||||
grpc_security_connector *security_connector; |
||||
} channel_data; |
||||
|
||||
/* Called either:
|
||||
- in response to an API call (or similar) from above, to send something |
||||
- a network event (or similar) from below, to receive something |
||||
op contains type and call direction information, in addition to the data |
||||
that is being sent or received. */ |
||||
static void auth_start_transport_op(grpc_call_element *elem, |
||||
grpc_transport_op *op) { |
||||
/* TODO(jboeuf): Get the metadata and get a new context from it. */ |
||||
|
||||
/* pass control down the stack */ |
||||
grpc_call_next_op(elem, op); |
||||
} |
||||
|
||||
/* Called on special channel events, such as disconnection or new incoming
|
||||
calls on the server */ |
||||
static void channel_op(grpc_channel_element *elem, |
||||
grpc_channel_element *from_elem, grpc_channel_op *op) { |
||||
grpc_channel_next_op(elem, op); |
||||
} |
||||
|
||||
/* Constructor for call_data */ |
||||
static void init_call_elem(grpc_call_element *elem, |
||||
const void *server_transport_data, |
||||
grpc_transport_op *initial_op) { |
||||
/* grab pointers to our data from the call element */ |
||||
call_data *calld = elem->call_data; |
||||
channel_data *chand = elem->channel_data; |
||||
grpc_server_security_context *server_ctx = NULL; |
||||
|
||||
/* initialize members */ |
||||
calld->unused = 0; |
||||
|
||||
GPR_ASSERT(initial_op && initial_op->context != NULL && |
||||
chand->security_connector->auth_context != NULL && |
||||
initial_op->context[GRPC_CONTEXT_SECURITY].value == NULL); |
||||
|
||||
/* Create a security context for the call and reference the auth context from
|
||||
the channel. */ |
||||
server_ctx = grpc_server_security_context_create(); |
||||
server_ctx->auth_context = |
||||
grpc_auth_context_ref(chand->security_connector->auth_context); |
||||
initial_op->context[GRPC_CONTEXT_SECURITY].value = server_ctx; |
||||
initial_op->context[GRPC_CONTEXT_SECURITY].destroy = |
||||
grpc_server_security_context_destroy; |
||||
} |
||||
|
||||
/* Destructor for call_data */ |
||||
static void destroy_call_elem(grpc_call_element *elem) { |
||||
} |
||||
|
||||
/* Constructor for channel_data */ |
||||
static void init_channel_elem(grpc_channel_element *elem, |
||||
const grpc_channel_args *args, grpc_mdctx *mdctx, |
||||
int is_first, int is_last) { |
||||
grpc_security_connector *sc = grpc_find_security_connector_in_args(args); |
||||
/* grab pointers to our data from the channel element */ |
||||
channel_data *chand = elem->channel_data; |
||||
|
||||
/* The first and the last filters tend to be implemented differently to
|
||||
handle the case that there's no 'next' filter to call on the up or down |
||||
path */ |
||||
GPR_ASSERT(!is_first); |
||||
GPR_ASSERT(!is_last); |
||||
GPR_ASSERT(sc != NULL); |
||||
|
||||
/* initialize members */ |
||||
GPR_ASSERT(!sc->is_client_side); |
||||
chand->security_connector = grpc_security_connector_ref(sc); |
||||
} |
||||
|
||||
/* Destructor for channel data */ |
||||
static void destroy_channel_elem(grpc_channel_element *elem) { |
||||
/* grab pointers to our data from the channel element */ |
||||
channel_data *chand = elem->channel_data; |
||||
grpc_security_connector_unref(chand->security_connector); |
||||
} |
||||
|
||||
const grpc_channel_filter grpc_server_auth_filter = { |
||||
auth_start_transport_op, channel_op, sizeof(call_data), init_call_elem, |
||||
destroy_call_elem, sizeof(channel_data), init_channel_elem, |
||||
destroy_channel_elem, "server-auth"}; |
@ -0,0 +1,22 @@ |
||||
<?xml version="1.0" encoding="utf-8"?> |
||||
<package> |
||||
<metadata> |
||||
<id>Grpc.Tools</id> |
||||
<title>gRPC C# Tools</title> |
||||
<summary>Tools for C# implementation of gRPC - an RPC library and framework</summary> |
||||
<description>Precompiled Windows binaries for generating protocol buffer messages and gRPC client/server code</description> |
||||
<version>0.5.0</version> |
||||
<authors>Google Inc.</authors> |
||||
<owners>grpc-packages</owners> |
||||
<licenseUrl>https://github.com/grpc/grpc/blob/master/LICENSE</licenseUrl> |
||||
<projectUrl>https://github.com/grpc/grpc</projectUrl> |
||||
<requireLicenseAcceptance>false</requireLicenseAcceptance> |
||||
<releaseNotes>protoc.exe - protocol buffer compiler v3.0.0-alpha-3; grpc_csharp_plugin.exe - gRPC C# protoc plugin version 0.5.0</releaseNotes> |
||||
<copyright>Copyright 2015, Google Inc.</copyright> |
||||
<tags>gRPC RPC Protocol HTTP/2</tags> |
||||
</metadata> |
||||
<files> |
||||
<file src="protoc.exe" target="tools" /> |
||||
<file src="grpc_csharp_plugin.exe" target="tools" /> |
||||
</files> |
||||
</package> |
@ -0,0 +1,24 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> |
||||
<plist version="1.0"> |
||||
<dict> |
||||
<key>CFBundleDevelopmentRegion</key> |
||||
<string>en</string> |
||||
<key>CFBundleExecutable</key> |
||||
<string>$(EXECUTABLE_NAME)</string> |
||||
<key>CFBundleIdentifier</key> |
||||
<string>gRPC.$(PRODUCT_NAME:rfc1034identifier)</string> |
||||
<key>CFBundleInfoDictionaryVersion</key> |
||||
<string>6.0</string> |
||||
<key>CFBundleName</key> |
||||
<string>$(PRODUCT_NAME)</string> |
||||
<key>CFBundlePackageType</key> |
||||
<string>BNDL</string> |
||||
<key>CFBundleShortVersionString</key> |
||||
<string>1.0</string> |
||||
<key>CFBundleSignature</key> |
||||
<string>????</string> |
||||
<key>CFBundleVersion</key> |
||||
<string>1</string> |
||||
</dict> |
||||
</plist> |
@ -0,0 +1,12 @@ |
||||
source 'https://github.com/CocoaPods/Specs.git' |
||||
platform :ios, '8.0' |
||||
|
||||
pod 'gRPC/RxLibrary', :path => "../../.." |
||||
|
||||
link_with 'AllTests' |
||||
|
||||
target 'Tests' do |
||||
end |
||||
|
||||
target 'AllTests' do |
||||
end |
@ -0,0 +1,140 @@ |
||||
/* |
||||
* |
||||
* Copyright 2015, Google Inc. |
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without |
||||
* modification, are permitted provided that the following conditions are |
||||
* met: |
||||
* |
||||
* * Redistributions of source code must retain the above copyright |
||||
* notice, this list of conditions and the following disclaimer. |
||||
* * Redistributions in binary form must reproduce the above |
||||
* copyright notice, this list of conditions and the following disclaimer |
||||
* in the documentation and/or other materials provided with the |
||||
* distribution. |
||||
* * Neither the name of Google Inc. nor the names of its |
||||
* contributors may be used to endorse or promote products derived from |
||||
* this software without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
* |
||||
*/ |
||||
|
||||
#import <UIKit/UIKit.h> |
||||
#import <XCTest/XCTest.h> |
||||
|
||||
#import <gRPC/GRXBufferedPipe.h> |
||||
#import <gRPC/GRXWriter.h> |
||||
#import <gRPC/GRXWriteable.h> |
||||
|
||||
// A mock of a GRXSingleValueHandler block that can be queried for how many times it was called and |
||||
// what were the last values passed to it. |
||||
// |
||||
// TODO(jcanizales): Move this to a test util library, and add tests for it. |
||||
@interface CapturingSingleValueHandler : NSObject |
||||
@property (nonatomic, readonly) void (^block)(id value, NSError *errorOrNil); |
||||
@property (nonatomic, readonly) NSUInteger timesCalled; |
||||
@property (nonatomic, readonly) id value; |
||||
@property (nonatomic, readonly) NSError *errorOrNil; |
||||
+ (instancetype)handler; |
||||
@end |
||||
|
||||
@implementation CapturingSingleValueHandler |
||||
+ (instancetype)handler { |
||||
return [[self alloc] init]; |
||||
} |
||||
|
||||
- (GRXSingleValueHandler)block { |
||||
return ^(id value, NSError *errorOrNil) { |
||||
++_timesCalled; |
||||
_value = value; |
||||
_errorOrNil = errorOrNil; |
||||
}; |
||||
} |
||||
@end |
||||
|
||||
@interface RxLibraryUnitTests : XCTestCase |
||||
@end |
||||
|
||||
@implementation RxLibraryUnitTests |
||||
|
||||
#pragma mark Writeable |
||||
|
||||
- (void)testWriteableSingleValueHandlerIsCalledForValue { |
||||
// Given: |
||||
CapturingSingleValueHandler *handler = [CapturingSingleValueHandler handler]; |
||||
id anyValue = @7; |
||||
|
||||
// If: |
||||
id<GRXWriteable> writeable = [GRXWriteable writeableWithSingleValueHandler:handler.block]; |
||||
[writeable writeValue:anyValue]; |
||||
|
||||
// Then: |
||||
XCTAssertEqual(handler.timesCalled, 1); |
||||
XCTAssertEqualObjects(handler.value, anyValue); |
||||
XCTAssertEqualObjects(handler.errorOrNil, nil); |
||||
} |
||||
|
||||
- (void)testWriteableSingleValueHandlerIsCalledForError { |
||||
// Given: |
||||
CapturingSingleValueHandler *handler = [CapturingSingleValueHandler handler]; |
||||
NSError *anyError = [NSError errorWithDomain:@"domain" code:7 userInfo:nil]; |
||||
|
||||
// If: |
||||
id<GRXWriteable> writeable = [GRXWriteable writeableWithSingleValueHandler:handler.block]; |
||||
[writeable writesFinishedWithError:anyError]; |
||||
|
||||
// Then: |
||||
XCTAssertEqual(handler.timesCalled, 1); |
||||
XCTAssertEqualObjects(handler.value, nil); |
||||
XCTAssertEqualObjects(handler.errorOrNil, anyError); |
||||
} |
||||
|
||||
#pragma mark BufferedPipe |
||||
|
||||
- (void)testBufferedPipePropagatesValue { |
||||
// Given: |
||||
CapturingSingleValueHandler *handler = [CapturingSingleValueHandler handler]; |
||||
id<GRXWriteable> writeable = [GRXWriteable writeableWithSingleValueHandler:handler.block]; |
||||
id anyValue = @7; |
||||
|
||||
// If: |
||||
GRXBufferedPipe *pipe = [GRXBufferedPipe pipe]; |
||||
[pipe startWithWriteable:writeable]; |
||||
[pipe writeValue:anyValue]; |
||||
|
||||
// Then: |
||||
XCTAssertEqual(handler.timesCalled, 1); |
||||
XCTAssertEqualObjects(handler.value, anyValue); |
||||
XCTAssertEqualObjects(handler.errorOrNil, nil); |
||||
} |
||||
|
||||
- (void)testBufferedPipePropagatesError { |
||||
// Given: |
||||
CapturingSingleValueHandler *handler = [CapturingSingleValueHandler handler]; |
||||
id<GRXWriteable> writeable = [GRXWriteable writeableWithSingleValueHandler:handler.block]; |
||||
NSError *anyError = [NSError errorWithDomain:@"domain" code:7 userInfo:nil]; |
||||
|
||||
// If: |
||||
GRXBufferedPipe *pipe = [GRXBufferedPipe pipe]; |
||||
[pipe startWithWriteable:writeable]; |
||||
[pipe writesFinishedWithError:anyError]; |
||||
|
||||
// Then: |
||||
XCTAssertEqual(handler.timesCalled, 1); |
||||
XCTAssertEqualObjects(handler.value, nil); |
||||
XCTAssertEqualObjects(handler.errorOrNil, anyError); |
||||
} |
||||
|
||||
@end |
@ -0,0 +1,40 @@ |
||||
/* |
||||
* |
||||
* Copyright 2015, Google Inc. |
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without |
||||
* modification, are permitted provided that the following conditions are |
||||
* met: |
||||
* |
||||
* * Redistributions of source code must retain the above copyright |
||||
* notice, this list of conditions and the following disclaimer. |
||||
* * Redistributions in binary form must reproduce the above |
||||
* copyright notice, this list of conditions and the following disclaimer |
||||
* in the documentation and/or other materials provided with the |
||||
* distribution. |
||||
* * Neither the name of Google Inc. nor the names of its |
||||
* contributors may be used to endorse or promote products derived from |
||||
* this software without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
* |
||||
*/ |
||||
|
||||
#import <Foundation/Foundation.h> |
||||
|
||||
@interface Tests : NSObject |
||||
@end |
||||
|
||||
@implementation Tests |
||||
@end |
@ -0,0 +1,430 @@ |
||||
// !$*UTF8*$! |
||||
{ |
||||
archiveVersion = 1; |
||||
classes = { |
||||
}; |
||||
objectVersion = 46; |
||||
objects = { |
||||
|
||||
/* Begin PBXBuildFile section */ |
||||
63423F4A1B150A5F006CF63C /* libTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 635697C71B14FC11007A7283 /* libTests.a */; }; |
||||
63423F511B151B77006CF63C /* RxLibraryUnitTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 63423F501B151B77006CF63C /* RxLibraryUnitTests.m */; }; |
||||
635697CD1B14FC11007A7283 /* Tests.m in Sources */ = {isa = PBXBuildFile; fileRef = 635697CC1B14FC11007A7283 /* Tests.m */; }; |
||||
7D8A186224D39101F90230F6 /* libPods.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 35F2B6BF3BAE8F0DC4AFD76E /* libPods.a */; }; |
||||
/* End PBXBuildFile section */ |
||||
|
||||
/* Begin PBXContainerItemProxy section */ |
||||
63423F4B1B150A5F006CF63C /* PBXContainerItemProxy */ = { |
||||
isa = PBXContainerItemProxy; |
||||
containerPortal = 635697BF1B14FC11007A7283 /* Project object */; |
||||
proxyType = 1; |
||||
remoteGlobalIDString = 635697C61B14FC11007A7283; |
||||
remoteInfo = Tests; |
||||
}; |
||||
/* End PBXContainerItemProxy section */ |
||||
|
||||
/* Begin PBXCopyFilesBuildPhase section */ |
||||
635697C51B14FC11007A7283 /* CopyFiles */ = { |
||||
isa = PBXCopyFilesBuildPhase; |
||||
buildActionMask = 2147483647; |
||||
dstPath = "include/$(PRODUCT_NAME)"; |
||||
dstSubfolderSpec = 16; |
||||
files = ( |
||||
); |
||||
runOnlyForDeploymentPostprocessing = 0; |
||||
}; |
||||
/* End PBXCopyFilesBuildPhase section */ |
||||
|
||||
/* Begin PBXFileReference section */ |
||||
0A4F89D9C90E9C30990218F0 /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.release.xcconfig; path = "Pods/Target Support Files/Pods/Pods.release.xcconfig"; sourceTree = "<group>"; }; |
||||
35F2B6BF3BAE8F0DC4AFD76E /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; }; |
||||
63423F441B150A5F006CF63C /* AllTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AllTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; |
||||
63423F501B151B77006CF63C /* RxLibraryUnitTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RxLibraryUnitTests.m; sourceTree = "<group>"; }; |
||||
635697C71B14FC11007A7283 /* libTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libTests.a; sourceTree = BUILT_PRODUCTS_DIR; }; |
||||
635697CC1B14FC11007A7283 /* Tests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Tests.m; sourceTree = "<group>"; }; |
||||
635697D81B14FC11007A7283 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; |
||||
FF7B5489BCFE40111D768DD0 /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.debug.xcconfig; path = "Pods/Target Support Files/Pods/Pods.debug.xcconfig"; sourceTree = "<group>"; }; |
||||
/* End PBXFileReference section */ |
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */ |
||||
63423F411B150A5F006CF63C /* Frameworks */ = { |
||||
isa = PBXFrameworksBuildPhase; |
||||
buildActionMask = 2147483647; |
||||
files = ( |
||||
63423F4A1B150A5F006CF63C /* libTests.a in Frameworks */, |
||||
7D8A186224D39101F90230F6 /* libPods.a in Frameworks */, |
||||
); |
||||
runOnlyForDeploymentPostprocessing = 0; |
||||
}; |
||||
635697C41B14FC11007A7283 /* Frameworks */ = { |
||||
isa = PBXFrameworksBuildPhase; |
||||
buildActionMask = 2147483647; |
||||
files = ( |
||||
); |
||||
runOnlyForDeploymentPostprocessing = 0; |
||||
}; |
||||
/* End PBXFrameworksBuildPhase section */ |
||||
|
||||
/* Begin PBXGroup section */ |
||||
136D535E19727099B941D7B1 /* Frameworks */ = { |
||||
isa = PBXGroup; |
||||
children = ( |
||||
35F2B6BF3BAE8F0DC4AFD76E /* libPods.a */, |
||||
); |
||||
name = Frameworks; |
||||
sourceTree = "<group>"; |
||||
}; |
||||
51E4650F34F854F41FF053B3 /* Pods */ = { |
||||
isa = PBXGroup; |
||||
children = ( |
||||
FF7B5489BCFE40111D768DD0 /* Pods.debug.xcconfig */, |
||||
0A4F89D9C90E9C30990218F0 /* Pods.release.xcconfig */, |
||||
); |
||||
name = Pods; |
||||
sourceTree = "<group>"; |
||||
}; |
||||
635697BE1B14FC11007A7283 = { |
||||
isa = PBXGroup; |
||||
children = ( |
||||
635697C91B14FC11007A7283 /* Tests */, |
||||
635697C81B14FC11007A7283 /* Products */, |
||||
51E4650F34F854F41FF053B3 /* Pods */, |
||||
136D535E19727099B941D7B1 /* Frameworks */, |
||||
); |
||||
sourceTree = "<group>"; |
||||
}; |
||||
635697C81B14FC11007A7283 /* Products */ = { |
||||
isa = PBXGroup; |
||||
children = ( |
||||
635697C71B14FC11007A7283 /* libTests.a */, |
||||
63423F441B150A5F006CF63C /* AllTests.xctest */, |
||||
); |
||||
name = Products; |
||||
sourceTree = "<group>"; |
||||
}; |
||||
635697C91B14FC11007A7283 /* Tests */ = { |
||||
isa = PBXGroup; |
||||
children = ( |
||||
63423F501B151B77006CF63C /* RxLibraryUnitTests.m */, |
||||
635697CC1B14FC11007A7283 /* Tests.m */, |
||||
635697D71B14FC11007A7283 /* Supporting Files */, |
||||
); |
||||
name = Tests; |
||||
sourceTree = SOURCE_ROOT; |
||||
}; |
||||
635697D71B14FC11007A7283 /* Supporting Files */ = { |
||||
isa = PBXGroup; |
||||
children = ( |
||||
635697D81B14FC11007A7283 /* Info.plist */, |
||||
); |
||||
name = "Supporting Files"; |
||||
sourceTree = "<group>"; |
||||
}; |
||||
/* End PBXGroup section */ |
||||
|
||||
/* Begin PBXNativeTarget section */ |
||||
63423F431B150A5F006CF63C /* AllTests */ = { |
||||
isa = PBXNativeTarget; |
||||
buildConfigurationList = 63423F4D1B150A5F006CF63C /* Build configuration list for PBXNativeTarget "AllTests" */; |
||||
buildPhases = ( |
||||
914ADDD7106BA9BB8A7E569F /* Check Pods Manifest.lock */, |
||||
63423F401B150A5F006CF63C /* Sources */, |
||||
63423F411B150A5F006CF63C /* Frameworks */, |
||||
63423F421B150A5F006CF63C /* Resources */, |
||||
A441F71824DCB9D0CA297748 /* Copy Pods Resources */, |
||||
); |
||||
buildRules = ( |
||||
); |
||||
dependencies = ( |
||||
63423F4C1B150A5F006CF63C /* PBXTargetDependency */, |
||||
); |
||||
name = AllTests; |
||||
productName = AllTests; |
||||
productReference = 63423F441B150A5F006CF63C /* AllTests.xctest */; |
||||
productType = "com.apple.product-type.bundle.unit-test"; |
||||
}; |
||||
635697C61B14FC11007A7283 /* Tests */ = { |
||||
isa = PBXNativeTarget; |
||||
buildConfigurationList = 635697DB1B14FC11007A7283 /* Build configuration list for PBXNativeTarget "Tests" */; |
||||
buildPhases = ( |
||||
635697C31B14FC11007A7283 /* Sources */, |
||||
635697C41B14FC11007A7283 /* Frameworks */, |
||||
635697C51B14FC11007A7283 /* CopyFiles */, |
||||
); |
||||
buildRules = ( |
||||
); |
||||
dependencies = ( |
||||
); |
||||
name = Tests; |
||||
productName = Tests; |
||||
productReference = 635697C71B14FC11007A7283 /* libTests.a */; |
||||
productType = "com.apple.product-type.library.static"; |
||||
}; |
||||
/* End PBXNativeTarget section */ |
||||
|
||||
/* Begin PBXProject section */ |
||||
635697BF1B14FC11007A7283 /* Project object */ = { |
||||
isa = PBXProject; |
||||
attributes = { |
||||
LastUpgradeCheck = 0630; |
||||
ORGANIZATIONNAME = gRPC; |
||||
TargetAttributes = { |
||||
63423F431B150A5F006CF63C = { |
||||
CreatedOnToolsVersion = 6.3.1; |
||||
}; |
||||
635697C61B14FC11007A7283 = { |
||||
CreatedOnToolsVersion = 6.3.1; |
||||
}; |
||||
}; |
||||
}; |
||||
buildConfigurationList = 635697C21B14FC11007A7283 /* Build configuration list for PBXProject "Tests" */; |
||||
compatibilityVersion = "Xcode 3.2"; |
||||
developmentRegion = English; |
||||
hasScannedForEncodings = 0; |
||||
knownRegions = ( |
||||
en, |
||||
); |
||||
mainGroup = 635697BE1B14FC11007A7283; |
||||
productRefGroup = 635697C81B14FC11007A7283 /* Products */; |
||||
projectDirPath = ""; |
||||
projectRoot = ""; |
||||
targets = ( |
||||
635697C61B14FC11007A7283 /* Tests */, |
||||
63423F431B150A5F006CF63C /* AllTests */, |
||||
); |
||||
}; |
||||
/* End PBXProject section */ |
||||
|
||||
/* Begin PBXResourcesBuildPhase section */ |
||||
63423F421B150A5F006CF63C /* Resources */ = { |
||||
isa = PBXResourcesBuildPhase; |
||||
buildActionMask = 2147483647; |
||||
files = ( |
||||
); |
||||
runOnlyForDeploymentPostprocessing = 0; |
||||
}; |
||||
/* End PBXResourcesBuildPhase section */ |
||||
|
||||
/* Begin PBXShellScriptBuildPhase section */ |
||||
914ADDD7106BA9BB8A7E569F /* Check Pods Manifest.lock */ = { |
||||
isa = PBXShellScriptBuildPhase; |
||||
buildActionMask = 2147483647; |
||||
files = ( |
||||
); |
||||
inputPaths = ( |
||||
); |
||||
name = "Check Pods Manifest.lock"; |
||||
outputPaths = ( |
||||
); |
||||
runOnlyForDeploymentPostprocessing = 0; |
||||
shellPath = /bin/sh; |
||||
shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; |
||||
showEnvVarsInLog = 0; |
||||
}; |
||||
A441F71824DCB9D0CA297748 /* Copy Pods Resources */ = { |
||||
isa = PBXShellScriptBuildPhase; |
||||
buildActionMask = 2147483647; |
||||
files = ( |
||||
); |
||||
inputPaths = ( |
||||
); |
||||
name = "Copy Pods Resources"; |
||||
outputPaths = ( |
||||
); |
||||
runOnlyForDeploymentPostprocessing = 0; |
||||
shellPath = /bin/sh; |
||||
shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods/Pods-resources.sh\"\n"; |
||||
showEnvVarsInLog = 0; |
||||
}; |
||||
/* End PBXShellScriptBuildPhase section */ |
||||
|
||||
/* Begin PBXSourcesBuildPhase section */ |
||||
63423F401B150A5F006CF63C /* Sources */ = { |
||||
isa = PBXSourcesBuildPhase; |
||||
buildActionMask = 2147483647; |
||||
files = ( |
||||
63423F511B151B77006CF63C /* RxLibraryUnitTests.m in Sources */, |
||||
); |
||||
runOnlyForDeploymentPostprocessing = 0; |
||||
}; |
||||
635697C31B14FC11007A7283 /* Sources */ = { |
||||
isa = PBXSourcesBuildPhase; |
||||
buildActionMask = 2147483647; |
||||
files = ( |
||||
635697CD1B14FC11007A7283 /* Tests.m in Sources */, |
||||
); |
||||
runOnlyForDeploymentPostprocessing = 0; |
||||
}; |
||||
/* End PBXSourcesBuildPhase section */ |
||||
|
||||
/* Begin PBXTargetDependency section */ |
||||
63423F4C1B150A5F006CF63C /* PBXTargetDependency */ = { |
||||
isa = PBXTargetDependency; |
||||
target = 635697C61B14FC11007A7283 /* Tests */; |
||||
targetProxy = 63423F4B1B150A5F006CF63C /* PBXContainerItemProxy */; |
||||
}; |
||||
/* End PBXTargetDependency section */ |
||||
|
||||
/* Begin XCBuildConfiguration section */ |
||||
63423F4E1B150A5F006CF63C /* Debug */ = { |
||||
isa = XCBuildConfiguration; |
||||
baseConfigurationReference = FF7B5489BCFE40111D768DD0 /* Pods.debug.xcconfig */; |
||||
buildSettings = { |
||||
FRAMEWORK_SEARCH_PATHS = ( |
||||
"$(SDKROOT)/Developer/Library/Frameworks", |
||||
"$(inherited)", |
||||
); |
||||
GCC_PREPROCESSOR_DEFINITIONS = ( |
||||
"DEBUG=1", |
||||
"$(inherited)", |
||||
); |
||||
INFOPLIST_FILE = Info.plist; |
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; |
||||
PRODUCT_NAME = "$(TARGET_NAME)"; |
||||
}; |
||||
name = Debug; |
||||
}; |
||||
63423F4F1B150A5F006CF63C /* Release */ = { |
||||
isa = XCBuildConfiguration; |
||||
baseConfigurationReference = 0A4F89D9C90E9C30990218F0 /* Pods.release.xcconfig */; |
||||
buildSettings = { |
||||
FRAMEWORK_SEARCH_PATHS = ( |
||||
"$(SDKROOT)/Developer/Library/Frameworks", |
||||
"$(inherited)", |
||||
); |
||||
INFOPLIST_FILE = Info.plist; |
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; |
||||
PRODUCT_NAME = "$(TARGET_NAME)"; |
||||
}; |
||||
name = Release; |
||||
}; |
||||
635697D91B14FC11007A7283 /* Debug */ = { |
||||
isa = XCBuildConfiguration; |
||||
buildSettings = { |
||||
ALWAYS_SEARCH_USER_PATHS = NO; |
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; |
||||
CLANG_CXX_LIBRARY = "libc++"; |
||||
CLANG_ENABLE_MODULES = YES; |
||||
CLANG_ENABLE_OBJC_ARC = YES; |
||||
CLANG_WARN_BOOL_CONVERSION = YES; |
||||
CLANG_WARN_CONSTANT_CONVERSION = YES; |
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; |
||||
CLANG_WARN_EMPTY_BODY = YES; |
||||
CLANG_WARN_ENUM_CONVERSION = YES; |
||||
CLANG_WARN_INT_CONVERSION = YES; |
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; |
||||
CLANG_WARN_UNREACHABLE_CODE = YES; |
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; |
||||
COPY_PHASE_STRIP = NO; |
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; |
||||
ENABLE_STRICT_OBJC_MSGSEND = YES; |
||||
GCC_C_LANGUAGE_STANDARD = gnu99; |
||||
GCC_DYNAMIC_NO_PIC = NO; |
||||
GCC_NO_COMMON_BLOCKS = YES; |
||||
GCC_OPTIMIZATION_LEVEL = 0; |
||||
GCC_PREPROCESSOR_DEFINITIONS = ( |
||||
"DEBUG=1", |
||||
"$(inherited)", |
||||
); |
||||
GCC_SYMBOLS_PRIVATE_EXTERN = NO; |
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES; |
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; |
||||
GCC_WARN_UNDECLARED_SELECTOR = YES; |
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; |
||||
GCC_WARN_UNUSED_FUNCTION = YES; |
||||
GCC_WARN_UNUSED_VARIABLE = YES; |
||||
IPHONEOS_DEPLOYMENT_TARGET = 8.3; |
||||
MTL_ENABLE_DEBUG_INFO = YES; |
||||
ONLY_ACTIVE_ARCH = YES; |
||||
SDKROOT = iphoneos; |
||||
}; |
||||
name = Debug; |
||||
}; |
||||
635697DA1B14FC11007A7283 /* Release */ = { |
||||
isa = XCBuildConfiguration; |
||||
buildSettings = { |
||||
ALWAYS_SEARCH_USER_PATHS = NO; |
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; |
||||
CLANG_CXX_LIBRARY = "libc++"; |
||||
CLANG_ENABLE_MODULES = YES; |
||||
CLANG_ENABLE_OBJC_ARC = YES; |
||||
CLANG_WARN_BOOL_CONVERSION = YES; |
||||
CLANG_WARN_CONSTANT_CONVERSION = YES; |
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; |
||||
CLANG_WARN_EMPTY_BODY = YES; |
||||
CLANG_WARN_ENUM_CONVERSION = YES; |
||||
CLANG_WARN_INT_CONVERSION = YES; |
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; |
||||
CLANG_WARN_UNREACHABLE_CODE = YES; |
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; |
||||
COPY_PHASE_STRIP = NO; |
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; |
||||
ENABLE_NS_ASSERTIONS = NO; |
||||
ENABLE_STRICT_OBJC_MSGSEND = YES; |
||||
GCC_C_LANGUAGE_STANDARD = gnu99; |
||||
GCC_NO_COMMON_BLOCKS = YES; |
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES; |
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; |
||||
GCC_WARN_UNDECLARED_SELECTOR = YES; |
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; |
||||
GCC_WARN_UNUSED_FUNCTION = YES; |
||||
GCC_WARN_UNUSED_VARIABLE = YES; |
||||
IPHONEOS_DEPLOYMENT_TARGET = 8.3; |
||||
MTL_ENABLE_DEBUG_INFO = NO; |
||||
SDKROOT = iphoneos; |
||||
VALIDATE_PRODUCT = YES; |
||||
}; |
||||
name = Release; |
||||
}; |
||||
635697DC1B14FC11007A7283 /* Debug */ = { |
||||
isa = XCBuildConfiguration; |
||||
buildSettings = { |
||||
OTHER_LDFLAGS = "-ObjC"; |
||||
PRODUCT_NAME = "$(TARGET_NAME)"; |
||||
SKIP_INSTALL = YES; |
||||
}; |
||||
name = Debug; |
||||
}; |
||||
635697DD1B14FC11007A7283 /* Release */ = { |
||||
isa = XCBuildConfiguration; |
||||
buildSettings = { |
||||
OTHER_LDFLAGS = "-ObjC"; |
||||
PRODUCT_NAME = "$(TARGET_NAME)"; |
||||
SKIP_INSTALL = YES; |
||||
}; |
||||
name = Release; |
||||
}; |
||||
/* End XCBuildConfiguration section */ |
||||
|
||||
/* Begin XCConfigurationList section */ |
||||
63423F4D1B150A5F006CF63C /* Build configuration list for PBXNativeTarget "AllTests" */ = { |
||||
isa = XCConfigurationList; |
||||
buildConfigurations = ( |
||||
63423F4E1B150A5F006CF63C /* Debug */, |
||||
63423F4F1B150A5F006CF63C /* Release */, |
||||
); |
||||
defaultConfigurationIsVisible = 0; |
||||
defaultConfigurationName = Release; |
||||
}; |
||||
635697C21B14FC11007A7283 /* Build configuration list for PBXProject "Tests" */ = { |
||||
isa = XCConfigurationList; |
||||
buildConfigurations = ( |
||||
635697D91B14FC11007A7283 /* Debug */, |
||||
635697DA1B14FC11007A7283 /* Release */, |
||||
); |
||||
defaultConfigurationIsVisible = 0; |
||||
defaultConfigurationName = Release; |
||||
}; |
||||
635697DB1B14FC11007A7283 /* Build configuration list for PBXNativeTarget "Tests" */ = { |
||||
isa = XCConfigurationList; |
||||
buildConfigurations = ( |
||||
635697DC1B14FC11007A7283 /* Debug */, |
||||
635697DD1B14FC11007A7283 /* Release */, |
||||
); |
||||
defaultConfigurationIsVisible = 0; |
||||
defaultConfigurationName = Release; |
||||
}; |
||||
/* End XCConfigurationList section */ |
||||
}; |
||||
rootObject = 635697BF1B14FC11007A7283 /* Project object */; |
||||
} |
@ -0,0 +1,7 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<Workspace |
||||
version = "1.0"> |
||||
<FileRef |
||||
location = "self:Tests.xcodeproj"> |
||||
</FileRef> |
||||
</Workspace> |
@ -0,0 +1,2 @@ |
||||
<%namespace file="Doxyfile.include" import="gen_doxyfile"/>\ |
||||
${gen_doxyfile(['grpc++'], 'C++', libs, True)} |
@ -1,2 +1,2 @@ |
||||
<%namespace file="Doxyfile.include" import="gen_doxyfile"/>\ |
||||
${gen_doxyfile(['grpc++'], 'C++', libs)} |
||||
${gen_doxyfile(['grpc++'], 'C++', libs, False)} |
||||
|
@ -0,0 +1,2 @@ |
||||
<%namespace file="Doxyfile.include" import="gen_doxyfile"/>\ |
||||
${gen_doxyfile(['grpc', 'gpr'], 'Core', libs, True)} |
@ -1,2 +1,2 @@ |
||||
<%namespace file="Doxyfile.include" import="gen_doxyfile"/>\ |
||||
${gen_doxyfile(['grpc', 'gpr'], 'Core', libs)} |
||||
${gen_doxyfile(['grpc', 'gpr'], 'Core', libs, False)} |
||||
|
@ -0,0 +1,118 @@ |
||||
/*
|
||||
* |
||||
* Copyright 2015, Google Inc. |
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without |
||||
* modification, are permitted provided that the following conditions are |
||||
* met: |
||||
* |
||||
* * Redistributions of source code must retain the above copyright |
||||
* notice, this list of conditions and the following disclaimer. |
||||
* * Redistributions in binary form must reproduce the above |
||||
* copyright notice, this list of conditions and the following disclaimer |
||||
* in the documentation and/or other materials provided with the |
||||
* distribution. |
||||
* * Neither the name of Google Inc. nor the names of its |
||||
* contributors may be used to endorse or promote products derived from |
||||
* this software without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
* |
||||
*/ |
||||
|
||||
#include "test/core/end2end/end2end_tests.h" |
||||
|
||||
#include <string.h> |
||||
|
||||
#include "src/core/channel/client_channel.h" |
||||
#include "src/core/channel/connected_channel.h" |
||||
#include "src/core/channel/http_server_filter.h" |
||||
#include "src/core/surface/channel.h" |
||||
#include "src/core/surface/client.h" |
||||
#include "src/core/surface/server.h" |
||||
#include "src/core/transport/chttp2_transport.h" |
||||
#include <grpc/support/alloc.h> |
||||
#include <grpc/support/host_port.h> |
||||
#include <grpc/support/log.h> |
||||
#include <grpc/support/sync.h> |
||||
#include <grpc/support/thd.h> |
||||
#include <grpc/support/useful.h> |
||||
#include "test/core/util/port.h" |
||||
#include "test/core/util/test_config.h" |
||||
|
||||
typedef struct fullstack_fixture_data { |
||||
char *localaddr; |
||||
} fullstack_fixture_data; |
||||
|
||||
static grpc_end2end_test_fixture chttp2_create_fixture_fullstack( |
||||
grpc_channel_args *client_args, grpc_channel_args *server_args) { |
||||
grpc_end2end_test_fixture f; |
||||
int port = grpc_pick_unused_port_or_die(); |
||||
fullstack_fixture_data *ffd = gpr_malloc(sizeof(fullstack_fixture_data)); |
||||
memset(&f, 0, sizeof(f)); |
||||
|
||||
gpr_join_host_port(&ffd->localaddr, "localhost", port); |
||||
|
||||
f.fixture_data = ffd; |
||||
f.client_cq = grpc_completion_queue_create(); |
||||
f.server_cq = grpc_completion_queue_create(); |
||||
|
||||
return f; |
||||
} |
||||
|
||||
void chttp2_init_client_fullstack(grpc_end2end_test_fixture *f, |
||||
grpc_channel_args *client_args) { |
||||
fullstack_fixture_data *ffd = f->fixture_data; |
||||
f->client = grpc_channel_create(ffd->localaddr, client_args); |
||||
} |
||||
|
||||
void chttp2_init_server_fullstack(grpc_end2end_test_fixture *f, |
||||
grpc_channel_args *server_args) { |
||||
fullstack_fixture_data *ffd = f->fixture_data; |
||||
if (f->server) { |
||||
grpc_server_destroy(f->server); |
||||
} |
||||
f->server = grpc_server_create(server_args); |
||||
grpc_server_register_completion_queue(f->server, f->server_cq); |
||||
GPR_ASSERT(grpc_server_add_http2_port(f->server, ffd->localaddr)); |
||||
grpc_server_start(f->server); |
||||
} |
||||
|
||||
void chttp2_tear_down_fullstack(grpc_end2end_test_fixture *f) { |
||||
fullstack_fixture_data *ffd = f->fixture_data; |
||||
gpr_free(ffd->localaddr); |
||||
gpr_free(ffd); |
||||
} |
||||
|
||||
/* All test configurations */ |
||||
static grpc_end2end_test_config configs[] = { |
||||
{"chttp2/fullstack", FEATURE_MASK_SUPPORTS_DELAYED_CONNECTION, |
||||
chttp2_create_fixture_fullstack, chttp2_init_client_fullstack, |
||||
chttp2_init_server_fullstack, chttp2_tear_down_fullstack}, |
||||
}; |
||||
|
||||
int main(int argc, char **argv) { |
||||
size_t i; |
||||
|
||||
grpc_test_init(argc, argv); |
||||
grpc_init(); |
||||
|
||||
for (i = 0; i < sizeof(configs) / sizeof(*configs); i++) { |
||||
grpc_end2end_tests(configs[i]); |
||||
} |
||||
|
||||
grpc_shutdown(); |
||||
|
||||
return 0; |
||||
} |
@ -0,0 +1,168 @@ |
||||
/*
|
||||
* |
||||
* Copyright 2015, Google Inc. |
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without |
||||
* modification, are permitted provided that the following conditions are |
||||
* met: |
||||
* |
||||
* * Redistributions of source code must retain the above copyright |
||||
* notice, this list of conditions and the following disclaimer. |
||||
* * Redistributions in binary form must reproduce the above |
||||
* copyright notice, this list of conditions and the following disclaimer |
||||
* in the documentation and/or other materials provided with the |
||||
* distribution. |
||||
* * Neither the name of Google Inc. nor the names of its |
||||
* contributors may be used to endorse or promote products derived from |
||||
* this software without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
* |
||||
*/ |
||||
|
||||
#include "test/core/end2end/end2end_tests.h" |
||||
|
||||
#include <stdio.h> |
||||
#include <string.h> |
||||
|
||||
#include "src/core/channel/channel_args.h" |
||||
#include "src/core/security/credentials.h" |
||||
#include "src/core/support/env.h" |
||||
#include "src/core/support/file.h" |
||||
#include "src/core/support/string.h" |
||||
#include <grpc/support/alloc.h> |
||||
#include <grpc/support/host_port.h> |
||||
#include <grpc/support/log.h> |
||||
#include "test/core/util/test_config.h" |
||||
#include "test/core/util/port.h" |
||||
#include "test/core/end2end/data/ssl_test_data.h" |
||||
|
||||
typedef struct fullstack_secure_fixture_data { |
||||
char *localaddr; |
||||
} fullstack_secure_fixture_data; |
||||
|
||||
static grpc_end2end_test_fixture chttp2_create_fixture_secure_fullstack( |
||||
grpc_channel_args *client_args, grpc_channel_args *server_args) { |
||||
grpc_end2end_test_fixture f; |
||||
int port = grpc_pick_unused_port_or_die(); |
||||
fullstack_secure_fixture_data *ffd = |
||||
gpr_malloc(sizeof(fullstack_secure_fixture_data)); |
||||
memset(&f, 0, sizeof(f)); |
||||
|
||||
gpr_join_host_port(&ffd->localaddr, "localhost", port); |
||||
|
||||
f.fixture_data = ffd; |
||||
f.client_cq = grpc_completion_queue_create(); |
||||
f.server_cq = grpc_completion_queue_create(); |
||||
|
||||
return f; |
||||
} |
||||
|
||||
static void chttp2_init_client_secure_fullstack(grpc_end2end_test_fixture *f, |
||||
grpc_channel_args *client_args, |
||||
grpc_credentials *creds) { |
||||
fullstack_secure_fixture_data *ffd = f->fixture_data; |
||||
f->client = grpc_secure_channel_create(creds, ffd->localaddr, client_args); |
||||
GPR_ASSERT(f->client != NULL); |
||||
grpc_credentials_release(creds); |
||||
} |
||||
|
||||
static void chttp2_init_server_secure_fullstack( |
||||
grpc_end2end_test_fixture *f, grpc_channel_args *server_args, |
||||
grpc_server_credentials *server_creds) { |
||||
fullstack_secure_fixture_data *ffd = f->fixture_data; |
||||
if (f->server) { |
||||
grpc_server_destroy(f->server); |
||||
} |
||||
f->server = grpc_server_create(server_args); |
||||
grpc_server_register_completion_queue(f->server, f->server_cq); |
||||
GPR_ASSERT(grpc_server_add_secure_http2_port(f->server, ffd->localaddr, |
||||
server_creds)); |
||||
grpc_server_credentials_release(server_creds); |
||||
grpc_server_start(f->server); |
||||
} |
||||
|
||||
void chttp2_tear_down_secure_fullstack(grpc_end2end_test_fixture *f) { |
||||
fullstack_secure_fixture_data *ffd = f->fixture_data; |
||||
gpr_free(ffd->localaddr); |
||||
gpr_free(ffd); |
||||
} |
||||
|
||||
static void chttp2_init_client_simple_ssl_secure_fullstack( |
||||
grpc_end2end_test_fixture *f, grpc_channel_args *client_args) { |
||||
grpc_credentials *ssl_creds = grpc_ssl_credentials_create(NULL, NULL); |
||||
grpc_arg ssl_name_override = {GRPC_ARG_STRING, |
||||
GRPC_SSL_TARGET_NAME_OVERRIDE_ARG, |
||||
{"foo.test.google.fr"}}; |
||||
grpc_channel_args *new_client_args = |
||||
grpc_channel_args_copy_and_add(client_args, &ssl_name_override); |
||||
chttp2_init_client_secure_fullstack(f, new_client_args, ssl_creds); |
||||
grpc_channel_args_destroy(new_client_args); |
||||
} |
||||
|
||||
static void chttp2_init_server_simple_ssl_secure_fullstack( |
||||
grpc_end2end_test_fixture *f, grpc_channel_args *server_args) { |
||||
grpc_ssl_pem_key_cert_pair pem_cert_key_pair = {test_server1_key, |
||||
test_server1_cert}; |
||||
grpc_server_credentials *ssl_creds = |
||||
grpc_ssl_server_credentials_create(NULL, &pem_cert_key_pair, 1); |
||||
chttp2_init_server_secure_fullstack(f, server_args, ssl_creds); |
||||
} |
||||
|
||||
/* All test configurations */ |
||||
|
||||
static grpc_end2end_test_config configs[] = { |
||||
{"chttp2/simple_ssl_fullstack", |
||||
FEATURE_MASK_SUPPORTS_DELAYED_CONNECTION | |
||||
FEATURE_MASK_SUPPORTS_HOSTNAME_VERIFICATION | |
||||
FEATURE_MASK_SUPPORTS_PER_CALL_CREDENTIALS, |
||||
chttp2_create_fixture_secure_fullstack, |
||||
chttp2_init_client_simple_ssl_secure_fullstack, |
||||
chttp2_init_server_simple_ssl_secure_fullstack, |
||||
chttp2_tear_down_secure_fullstack}, |
||||
}; |
||||
|
||||
int main(int argc, char **argv) { |
||||
size_t i; |
||||
FILE *roots_file; |
||||
size_t roots_size = strlen(test_root_cert); |
||||
char *roots_filename; |
||||
|
||||
grpc_platform_become_multipoller = grpc_poll_become_multipoller; |
||||
|
||||
grpc_test_init(argc, argv); |
||||
|
||||
/* Set the SSL roots env var. */ |
||||
roots_file = gpr_tmpfile("chttp2_simple_ssl_with_poll_fullstack_test", |
||||
&roots_filename); |
||||
GPR_ASSERT(roots_filename != NULL); |
||||
GPR_ASSERT(roots_file != NULL); |
||||
GPR_ASSERT(fwrite(test_root_cert, 1, roots_size, roots_file) == roots_size); |
||||
fclose(roots_file); |
||||
gpr_setenv(GRPC_DEFAULT_SSL_ROOTS_FILE_PATH_ENV_VAR, roots_filename); |
||||
|
||||
grpc_init(); |
||||
|
||||
for (i = 0; i < sizeof(configs) / sizeof(*configs); i++) { |
||||
grpc_end2end_tests(configs[i]); |
||||
} |
||||
|
||||
grpc_shutdown(); |
||||
|
||||
/* Cleanup. */ |
||||
remove(roots_filename); |
||||
gpr_free(roots_filename); |
||||
|
||||
return 0; |
||||
} |
@ -0,0 +1,143 @@ |
||||
/*
|
||||
* |
||||
* Copyright 2015, Google Inc. |
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without |
||||
* modification, are permitted provided that the following conditions are |
||||
* met: |
||||
* |
||||
* * Redistributions of source code must retain the above copyright |
||||
* notice, this list of conditions and the following disclaimer. |
||||
* * Redistributions in binary form must reproduce the above |
||||
* copyright notice, this list of conditions and the following disclaimer |
||||
* in the documentation and/or other materials provided with the |
||||
* distribution. |
||||
* * Neither the name of Google Inc. nor the names of its |
||||
* contributors may be used to endorse or promote products derived from |
||||
* this software without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
* |
||||
*/ |
||||
|
||||
#include<string.h> |
||||
|
||||
#include "src/core/security/security_context.h" |
||||
#include "src/core/support/string.h" |
||||
#include "test/core/util/test_config.h" |
||||
|
||||
#include <grpc/support/log.h> |
||||
|
||||
static void test_empty_context(void) { |
||||
grpc_auth_context *ctx = grpc_auth_context_create(NULL, 0); |
||||
grpc_auth_property_iterator it; |
||||
|
||||
gpr_log(GPR_INFO, "test_empty_context"); |
||||
GPR_ASSERT(ctx != NULL); |
||||
GPR_ASSERT(grpc_auth_context_peer_identity_property_name(ctx) == NULL); |
||||
it = grpc_auth_context_peer_identity(ctx); |
||||
GPR_ASSERT(grpc_auth_property_iterator_next(&it) == NULL); |
||||
it = grpc_auth_context_property_iterator(ctx); |
||||
GPR_ASSERT(grpc_auth_property_iterator_next(&it) == NULL); |
||||
it = grpc_auth_context_find_properties_by_name(ctx, "foo"); |
||||
GPR_ASSERT(grpc_auth_property_iterator_next(&it) == NULL); |
||||
grpc_auth_context_unref(ctx); |
||||
} |
||||
|
||||
static void test_simple_context(void) { |
||||
grpc_auth_context *ctx = grpc_auth_context_create(NULL, 3); |
||||
grpc_auth_property_iterator it; |
||||
size_t i; |
||||
|
||||
gpr_log(GPR_INFO, "test_simple_context"); |
||||
GPR_ASSERT(ctx != NULL); |
||||
GPR_ASSERT(ctx->property_count == 3); |
||||
ctx->properties[0] = grpc_auth_property_init_from_cstring("name", "chapi"); |
||||
ctx->properties[1] = grpc_auth_property_init_from_cstring("name", "chapo"); |
||||
ctx->properties[2] = grpc_auth_property_init_from_cstring("foo", "bar"); |
||||
ctx->peer_identity_property_name = ctx->properties[0].name; |
||||
|
||||
GPR_ASSERT( |
||||
strcmp(grpc_auth_context_peer_identity_property_name(ctx), "name") == 0); |
||||
it = grpc_auth_context_property_iterator(ctx); |
||||
for (i = 0; i < ctx->property_count; i++) { |
||||
const grpc_auth_property *p = grpc_auth_property_iterator_next(&it); |
||||
GPR_ASSERT(p == &ctx->properties[i]); |
||||
} |
||||
GPR_ASSERT(grpc_auth_property_iterator_next(&it) == NULL); |
||||
|
||||
it = grpc_auth_context_find_properties_by_name(ctx, "foo"); |
||||
GPR_ASSERT(grpc_auth_property_iterator_next(&it) == &ctx->properties[2]); |
||||
GPR_ASSERT(grpc_auth_property_iterator_next(&it) == NULL); |
||||
|
||||
it = grpc_auth_context_peer_identity(ctx); |
||||
GPR_ASSERT(grpc_auth_property_iterator_next(&it) == &ctx->properties[0]); |
||||
GPR_ASSERT(grpc_auth_property_iterator_next(&it) == &ctx->properties[1]); |
||||
GPR_ASSERT(grpc_auth_property_iterator_next(&it) == NULL); |
||||
|
||||
grpc_auth_context_unref(ctx); |
||||
} |
||||
|
||||
static void test_chained_context(void) { |
||||
grpc_auth_context *chained = grpc_auth_context_create(NULL, 2); |
||||
grpc_auth_context *ctx = grpc_auth_context_create(chained, 3); |
||||
grpc_auth_property_iterator it; |
||||
size_t i; |
||||
|
||||
gpr_log(GPR_INFO, "test_chained_context"); |
||||
grpc_auth_context_unref(chained); |
||||
chained->properties[0] = |
||||
grpc_auth_property_init_from_cstring("name", "padapo"); |
||||
chained->properties[1] = grpc_auth_property_init_from_cstring("foo", "baz"); |
||||
ctx->properties[0] = grpc_auth_property_init_from_cstring("name", "chapi"); |
||||
ctx->properties[1] = grpc_auth_property_init_from_cstring("name", "chapo"); |
||||
ctx->properties[2] = grpc_auth_property_init_from_cstring("foo", "bar"); |
||||
ctx->peer_identity_property_name = ctx->properties[0].name; |
||||
|
||||
GPR_ASSERT( |
||||
strcmp(grpc_auth_context_peer_identity_property_name(ctx), "name") == 0); |
||||
it = grpc_auth_context_property_iterator(ctx); |
||||
for (i = 0; i < ctx->property_count; i++) { |
||||
const grpc_auth_property *p = grpc_auth_property_iterator_next(&it); |
||||
GPR_ASSERT(p == &ctx->properties[i]); |
||||
} |
||||
for (i = 0; i < chained->property_count; i++) { |
||||
const grpc_auth_property *p = grpc_auth_property_iterator_next(&it); |
||||
GPR_ASSERT(p == &chained->properties[i]); |
||||
} |
||||
GPR_ASSERT(grpc_auth_property_iterator_next(&it) == NULL); |
||||
|
||||
it = grpc_auth_context_find_properties_by_name(ctx, "foo"); |
||||
GPR_ASSERT(grpc_auth_property_iterator_next(&it) == &ctx->properties[2]); |
||||
GPR_ASSERT(grpc_auth_property_iterator_next(&it) == &chained->properties[1]); |
||||
GPR_ASSERT(grpc_auth_property_iterator_next(&it) == NULL); |
||||
|
||||
it = grpc_auth_context_peer_identity(ctx); |
||||
GPR_ASSERT(grpc_auth_property_iterator_next(&it) == &ctx->properties[0]); |
||||
GPR_ASSERT(grpc_auth_property_iterator_next(&it) == &ctx->properties[1]); |
||||
GPR_ASSERT(grpc_auth_property_iterator_next(&it) == &chained->properties[0]); |
||||
GPR_ASSERT(grpc_auth_property_iterator_next(&it) == NULL); |
||||
|
||||
grpc_auth_context_unref(ctx); |
||||
} |
||||
|
||||
|
||||
int main(int argc, char **argv) { |
||||
grpc_test_init(argc, argv); |
||||
test_empty_context(); |
||||
test_simple_context(); |
||||
test_chained_context(); |
||||
return 0; |
||||
} |
||||
|
@ -1 +1 @@ |
||||
Subproject commit 8908cf16fe81f42c766fdf067b1da4554f54ed87 |
||||
Subproject commit 3e2c8a5dd79481e1d36572cdf65be93514ba6581 |
@ -0,0 +1,38 @@ |
||||
#!/bin/sh |
||||
# Copyright 2015, Google Inc. |
||||
# All rights reserved. |
||||
# |
||||
# Redistribution and use in source and binary forms, with or without |
||||
# modification, are permitted provided that the following conditions are |
||||
# met: |
||||
# |
||||
# * Redistributions of source code must retain the above copyright |
||||
# notice, this list of conditions and the following disclaimer. |
||||
# * Redistributions in binary form must reproduce the above |
||||
# copyright notice, this list of conditions and the following disclaimer |
||||
# in the documentation and/or other materials provided with the |
||||
# distribution. |
||||
# * Neither the name of Google Inc. nor the names of its |
||||
# contributors may be used to endorse or promote products derived from |
||||
# this software without specific prior written permission. |
||||
# |
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
||||
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
|
||||
gen_build_json_dirs="test/core/end2end test/core/bad_client" |
||||
gen_build_files="" |
||||
for gen_build_json in $gen_build_json_dirs |
||||
do |
||||
output_file=`mktemp /tmp/genXXXXXX` |
||||
$gen_build_json/gen_build_json.py > $output_file |
||||
gen_build_files="$gen_build_files $output_file" |
||||
done |
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
Loading…
Reference in new issue