From c5f55f7e26dd087a7db5fc55cf4c4660d0134b48 Mon Sep 17 00:00:00 2001 From: Martin Zink Date: Wed, 2 Mar 2022 09:24:52 +0100 Subject: [PATCH] added cpp to ci --- .github/workflows/main.yml | 3 +++ ci/run-cpp-example.sh | 13 +++++++++++++ examples/cpp/.gitignore | 1 + examples/cpp/CMakeLists.txt | 27 ++++++++++++++++++++------- examples/cpp/cpp-examples.cpp | 26 ++++++++++++++++++++++++++ examples/cpp/list_bucket.cpp | 15 --------------- examples/cpp/upload.cpp | 20 -------------------- 7 files changed, 63 insertions(+), 42 deletions(-) create mode 100644 ci/run-cpp-example.sh create mode 100644 examples/cpp/.gitignore create mode 100644 examples/cpp/cpp-examples.cpp delete mode 100644 examples/cpp/list_bucket.cpp delete mode 100644 examples/cpp/upload.cpp diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index a8da4cbf92..a1a1992f68 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -137,6 +137,9 @@ jobs: - lang: java docker-image: openjdk:11 entrypoint: /bin/sh + - lang: cpp + docker-image: alpine + entrypoint: /bin/sh name: test-${{ matrix.lang }}-example runs-on: ubuntu-latest diff --git a/ci/run-cpp-example.sh b/ci/run-cpp-example.sh new file mode 100644 index 0000000000..5008055720 --- /dev/null +++ b/ci/run-cpp-example.sh @@ -0,0 +1,13 @@ +set -e + +./fake-gcs-server -backend memory -scheme http -port 8080 -external-url "http://localhost:8080" & + +( + apk add abseil-cpp-dev gtest-dev cmake make g++ nlohmann-json curl-dev git + cd examples/cpp + mkdir build + cd build + cmake .. + make -j$(nproc) + ./cpp-example +) diff --git a/examples/cpp/.gitignore b/examples/cpp/.gitignore new file mode 100644 index 0000000000..f35e3c08f8 --- /dev/null +++ b/examples/cpp/.gitignore @@ -0,0 +1 @@ +*build* diff --git a/examples/cpp/CMakeLists.txt b/examples/cpp/CMakeLists.txt index 9a34403e08..c96348806e 100644 --- a/examples/cpp/CMakeLists.txt +++ b/examples/cpp/CMakeLists.txt @@ -1,19 +1,32 @@ cmake_minimum_required (VERSION 3.2) -set(CMAKE_CXX_STANDARD 20) +set(CMAKE_CXX_STANDARD 11) project (fake-gcs-server-cpp-examples) include(FetchContent) +find_package(GTest REQUIRED) +find_package(absl CONFIG REQUIRED) + set(GOOGLE_CLOUD_CPP_ENABLE storage CACHE INTERNAL storage-api) set(GOOGLE_CLOUD_CPP_ENABLE_MACOS_OPENSSL_CHECK OFF CACHE INTERNAL macos-openssl-check) set(BUILD_TESTING OFF CACHE INTERNAL testing-off) +set(CRC32C_USE_GLOG OFF CACHE INTERNAL crc32c-glog-off) +set(CRC32C_BUILD_TESTS OFF CACHE INTERNAL crc32c-gtest-off) +set(CRC32C_BUILD_BENCHMARKS OFF CACHE INTERNAL crc32-benchmarks-off) +set(CRC32C_INSTALL ON CACHE INTERNAL crc32-install-on) +FetchContent_Declare( + crc32c + URL https://github.com/google/crc32c/archive/refs/tags/1.1.1.tar.gz + URL_HASH SHA256=a6533f45b1670b5d59b38a514d82b09c6fb70cc1050467220216335e873074e8 +) +FetchContent_MakeAvailable(crc32c) +add_library(Crc32c::crc32c ALIAS crc32c) #TODO replace b03448411402c83082c279b246548d578dee05c7 with the next release which contains it FetchContent_Declare(google-cloud-cpp - GIT_REPOSITORY git@github.com:googleapis/google-cloud-cpp.git + GIT_REPOSITORY https://github.com/googleapis/google-cloud-cpp.git GIT_TAG b03448411402c83082c279b246548d578dee05c7) FetchContent_MakeAvailable(google-cloud-cpp) -add_executable(upload-example upload.cpp) -target_link_libraries(upload-example google-cloud-cpp::storage) - -add_executable(list-bucket-example list_bucket.cpp) -target_link_libraries(list-bucket-example google-cloud-cpp::storage) +add_executable(cpp-example cpp-examples.cpp) +target_include_directories(cpp-example PUBLIC ${google-cloud-cpp_INCLUDE_DIRS}) +target_link_libraries(cpp-example PUBLIC google-cloud-cpp::storage gtest) +gtest_add_tests(TARGET cpp-example) diff --git a/examples/cpp/cpp-examples.cpp b/examples/cpp/cpp-examples.cpp new file mode 100644 index 0000000000..66db574764 --- /dev/null +++ b/examples/cpp/cpp-examples.cpp @@ -0,0 +1,26 @@ +#include +#include "gtest/gtest.h" +#include "google/cloud/storage/client.h" + +using namespace google::cloud::storage; + +TEST(CppExamples, ResumableUploadTest) { + ClientOptions options(oauth2::CreateAnonymousCredentials()); + options.set_endpoint("localhost:8080"); + Client client(options, LimitedErrorCountRetryPolicy(2)); + client.CreateBucket("my-bucket", BucketMetadata()); + auto writer = client.WriteObject("my-bucket", "my-key"); + writer << "hello world"; + writer.Close(); + auto result = writer.metadata(); + ASSERT_TRUE(result.ok()); + auto objects = client.ListObjects("my-bucket"); + ASSERT_EQ(1, std::distance(objects.begin(), objects.end())); + ASSERT_TRUE(objects.begin()->ok()); + EXPECT_EQ("my-key", objects.begin()->value().name()); +} + +int main(int argc, char **argv) { + ::testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} diff --git a/examples/cpp/list_bucket.cpp b/examples/cpp/list_bucket.cpp deleted file mode 100644 index 5be7be88c5..0000000000 --- a/examples/cpp/list_bucket.cpp +++ /dev/null @@ -1,15 +0,0 @@ -#include "google/cloud/storage/client.h" -#include - -using namespace google::cloud::storage; - -int main() { - ClientOptions options(oauth2::CreateAnonymousCredentials()); - options.set_endpoint("localhost:4443"); - Client client(options, LimitedErrorCountRetryPolicy(2)); - auto objects = client.ListObjects("my-bucket"); - for (auto& object : objects) { - if (object.ok()) - std::cout << object.value(); - } -} diff --git a/examples/cpp/upload.cpp b/examples/cpp/upload.cpp deleted file mode 100644 index 2f6b2f9497..0000000000 --- a/examples/cpp/upload.cpp +++ /dev/null @@ -1,20 +0,0 @@ -#include "google/cloud/storage/client.h" -#include - -using namespace google::cloud::storage; - -int main() { - ClientOptions options(oauth2::CreateAnonymousCredentials()); - options.set_endpoint("localhost:4443"); - Client client(options, LimitedErrorCountRetryPolicy(2)); - client.CreateBucket("my-bucket", BucketMetadata()); - auto writer = client.WriteObject("my-bucket", "my-key"); - writer << "hello world"; - writer.Close(); - auto result = writer.metadata(); - if (!result.ok()) { - std::cout << "Upload failed: " << result.status().message(); - } else { - std::cout << "Upload succeeded"; - } -}