Skip to content

Commit

Permalink
doc: examples use declarative configuration 3/N (#369)
Browse files Browse the repository at this point in the history
  • Loading branch information
coryan committed Jul 4, 2023
1 parent 9761987 commit 6a9c412
Show file tree
Hide file tree
Showing 7 changed files with 66 additions and 61 deletions.
5 changes: 0 additions & 5 deletions ci/build-examples.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,6 @@ steps:
waitFor: ['gcf-builder-ready']
id: 'site-concepts_after_response'
args: ['build',
'--env', 'GOOGLE_FUNCTION_SIGNATURE_TYPE=http',
'--env', 'GOOGLE_FUNCTION_TARGET=concepts_after_response',
'--path', 'examples/site/concepts_after_response',
'site-concepts_after_response',
Expand All @@ -171,7 +170,6 @@ steps:
waitFor: ['gcf-builder-ready']
id: 'site-concepts_after_timeout'
args: ['build',
'--env', 'GOOGLE_FUNCTION_SIGNATURE_TYPE=http',
'--env', 'GOOGLE_FUNCTION_TARGET=concepts_after_timeout',
'--path', 'examples/site/concepts_after_timeout',
'site-concepts_after_timeout',
Expand All @@ -180,7 +178,6 @@ steps:
waitFor: ['gcf-builder-ready']
id: 'site-concepts_filesystem'
args: ['build',
'--env', 'GOOGLE_FUNCTION_SIGNATURE_TYPE=http',
'--env', 'GOOGLE_FUNCTION_TARGET=concepts_filesystem',
'--path', 'examples/site/concepts_filesystem',
'site-concepts_filesystem',
Expand All @@ -189,7 +186,6 @@ steps:
waitFor: ['gcf-builder-ready']
id: 'site-concepts_request'
args: ['build',
'--env', 'GOOGLE_FUNCTION_SIGNATURE_TYPE=http',
'--env', 'GOOGLE_FUNCTION_TARGET=concepts_request',
'--path', 'examples/site/concepts_request',
'site-concepts_request',
Expand All @@ -198,7 +194,6 @@ steps:
waitFor: ['gcf-builder-ready']
id: 'site-concepts_stateless'
args: ['build',
'--env', 'GOOGLE_FUNCTION_SIGNATURE_TYPE=http',
'--env', 'GOOGLE_FUNCTION_TARGET=concepts_stateless',
'--path', 'examples/site/concepts_stateless',
'site-concepts_stateless',
Expand Down
22 changes: 11 additions & 11 deletions examples/site/concepts_after_response/concepts_after_response.cc
Original file line number Diff line number Diff line change
Expand Up @@ -13,21 +13,21 @@
// limitations under the License.

// [START functions_concepts_after_response]
#include <google/cloud/functions/http_request.h>
#include <google/cloud/functions/http_response.h>
#include <google/cloud/functions/function.h>
#include <future>

namespace gcf = ::google::cloud::functions;

gcf::HttpResponse concepts_after_response(
gcf::HttpRequest /*request*/) { // NOLINT
(void)std::async(std::launch::async, [] {
// This code may fail to complete, or even fail to start at all.
auto constexpr kIterations = 10;
int sum = 0;
for (int i = 0; i != kIterations; ++i) sum += i;
return sum;
gcf::Function concepts_after_response() {
return gcf::MakeFunction([](gcf::HttpRequest const&) {
(void)std::async(std::launch::async, [] {
// This code may fail to complete, or even fail to start at all.
auto constexpr kIterations = 10;
int sum = 0;
for (int i = 0; i != kIterations; ++i) sum += i;
return sum;
});
return gcf::HttpResponse{}.set_payload("Hello World!");
});
return gcf::HttpResponse{}.set_payload("Hello World!");
}
// [END functions_concepts_after_response]
15 changes: 8 additions & 7 deletions examples/site/concepts_after_timeout/concepts_after_timeout.cc
Original file line number Diff line number Diff line change
Expand Up @@ -13,19 +13,20 @@
// limitations under the License.

// [START functions_concepts_after_timeout]
#include <google/cloud/functions/http_request.h>
#include <google/cloud/functions/http_response.h>
#include <google/cloud/functions/function.h>
#include <chrono>
#include <iostream>
#include <thread>

namespace gcf = ::google::cloud::functions;

gcf::HttpResponse concepts_after_timeout(gcf::HttpRequest request) { // NOLINT
gcf::Function concepts_after_timeout() {
using std::chrono::minutes;
std::cout << "Function running..." << std::endl;
if (request.verb() == "GET") std::this_thread::sleep_for(minutes(2));
std::cout << "Function completed!" << std::endl;
return gcf::HttpResponse{}.set_payload("Function completed!");
return gcf::MakeFunction([](gcf::HttpRequest const& request) {
std::cout << "Function running..." << std::endl;
if (request.verb() == "GET") std::this_thread::sleep_for(minutes(2));
std::cout << "Function completed!" << std::endl;
return gcf::HttpResponse{}.set_payload("Function completed!");
});
}
// [END functions_concepts_after_timeout]
23 changes: 12 additions & 11 deletions examples/site/concepts_filesystem/concepts_filesystem.cc
Original file line number Diff line number Diff line change
Expand Up @@ -13,20 +13,21 @@
// limitations under the License.

// [START functions_concepts_filesystem]
#include <google/cloud/functions/http_request.h>
#include <google/cloud/functions/http_response.h>
#include <google/cloud/functions/function.h>
#include <filesystem>

namespace gcf = ::google::cloud::functions;

gcf::HttpResponse concepts_filesystem(gcf::HttpRequest /*request*/) { // NOLINT
std::string payload;
for (auto const& p : std::filesystem::directory_iterator(".")) {
payload += p.path().generic_string();
payload += "\n";
}
return gcf::HttpResponse{}
.set_header("content-type", "text/plain")
.set_payload(payload);
gcf::Function concepts_filesystem() {
return gcf::MakeFunction([](gcf::HttpRequest const& /*request*/) {
std::string payload;
for (auto const& p : std::filesystem::directory_iterator(".")) {
payload += p.path().generic_string();
payload += "\n";
}
return gcf::HttpResponse{}
.set_header("content-type", "text/plain")
.set_payload(payload);
});
}
// [END functions_concepts_filesystem]
15 changes: 8 additions & 7 deletions examples/site/concepts_request/concepts_request.cc
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,7 @@
// limitations under the License.

// [START functions_concepts_requests]
#include <google/cloud/functions/http_request.h>
#include <google/cloud/functions/http_response.h>
#include <google/cloud/functions/function.h>
#include <boost/beast.hpp>

namespace gcf = ::google::cloud::functions;
Expand All @@ -24,11 +23,13 @@ namespace {
unsigned int make_http_request(std::string const& host);
} // namespace

gcf::HttpResponse concepts_request(gcf::HttpRequest /*request*/) { // NOLINT
std::string const host = "example.com";
auto const code = make_http_request(host);
return gcf::HttpResponse{}.set_payload(
"Received code " + std::to_string(code) + " from " + host);
gcf::Function concepts_request() {
return gcf::MakeFunction([](gcf::HttpRequest const& /*request*/) {
std::string const host = "example.com";
auto const code = make_http_request(host);
return gcf::HttpResponse{}.set_payload(
"Received code " + std::to_string(code) + " from " + host);
});
}
// [END functions_concepts_requests]

Expand Down
11 changes: 6 additions & 5 deletions examples/site/concepts_stateless/concepts_stateless.cc
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,7 @@
// limitations under the License.

// [START functions_concepts_stateless]
#include <google/cloud/functions/http_request.h>
#include <google/cloud/functions/http_response.h>
#include <google/cloud/functions/function.h>
#include <atomic>
#include <string>

Expand All @@ -24,8 +23,10 @@ namespace {
std::atomic<int> count{0};
} // namespace

gcf::HttpResponse concepts_stateless(gcf::HttpRequest /*request*/) { // NOLINT
return gcf::HttpResponse{}.set_payload("Instance execution count: " +
std::to_string(++count));
gcf::Function concepts_stateless() {
return gcf::MakeFunction([](gcf::HttpRequest const& /*request*/) {
return gcf::HttpResponse{}.set_payload("Instance execution count: " +
std::to_string(++count));
});
}
// [END functions_concepts_stateless]
36 changes: 21 additions & 15 deletions examples/site_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,11 @@ namespace gcf = ::google::cloud::functions;
namespace gcf_internal = ::google::cloud::functions_internal;

extern gcf::HttpResponse bearer_token(gcf::HttpRequest request);
extern gcf::HttpResponse concepts_after_response(gcf::HttpRequest request);
extern gcf::HttpResponse concepts_after_timeout(gcf::HttpRequest request);
extern gcf::HttpResponse concepts_filesystem(gcf::HttpRequest request);
extern gcf::HttpResponse concepts_request(gcf::HttpRequest request);
extern gcf::HttpResponse concepts_stateless(gcf::HttpRequest request);
extern gcf::Function concepts_after_response();
extern gcf::Function concepts_after_timeout();
extern gcf::Function concepts_filesystem();
extern gcf::Function concepts_request();
extern gcf::Function concepts_stateless();
extern gcf::HttpResponse env_vars(gcf::HttpRequest request);
extern gcf::HttpResponse hello_world_error(gcf::HttpRequest request);
extern gcf::HttpResponse hello_world_get(gcf::HttpRequest request);
Expand Down Expand Up @@ -156,28 +156,34 @@ lUtj+/nH3HDQjM4ltYfTPUg=
}

TEST(ExamplesSiteTest, ConceptsAfterResponse) {
auto actual = concepts_after_response(gcf::HttpRequest{});
EXPECT_THAT(actual.payload(), HasSubstr("Hello World!"));
auto function = concepts_after_response();
auto const actual = TriggerFunctionHttp(function, gcf::HttpRequest{});
EXPECT_THAT(actual.body(), HasSubstr("Hello World!"));
}

TEST(ExamplesSiteTest, ConceptsAfterTimeout) {
auto actual = concepts_after_timeout(gcf::HttpRequest{}.set_verb("PUT"));
EXPECT_THAT(actual.payload(), HasSubstr("Function completed!"));
auto function = concepts_after_timeout();
auto const actual =
TriggerFunctionHttp(function, gcf::HttpRequest{}.set_verb("PUT"));
EXPECT_THAT(actual.body(), HasSubstr("Function completed!"));
}

TEST(ExamplesSiteTest, ConceptsFilesystem) {
auto actual = concepts_filesystem(gcf::HttpRequest{});
EXPECT_THAT(actual.payload(), Not(IsEmpty()));
auto function = concepts_filesystem();
auto const actual = TriggerFunctionHttp(function, gcf::HttpRequest{});
EXPECT_THAT(actual.body(), Not(IsEmpty()));
}

TEST(ExamplesSiteTest, ConceptsRequest) {
auto actual = concepts_request(gcf::HttpRequest{});
EXPECT_THAT(actual.payload(), HasSubstr("Received code"));
auto function = concepts_request();
auto const actual = TriggerFunctionHttp(function, gcf::HttpRequest{});
EXPECT_THAT(actual.body(), HasSubstr("Received code"));
}

TEST(ExamplesSiteTest, ConceptsStateless) {
auto actual = concepts_stateless(gcf::HttpRequest{});
EXPECT_THAT(actual.payload(), HasSubstr("Instance execution count: "));
auto function = concepts_stateless();
auto const actual = TriggerFunctionHttp(function, gcf::HttpRequest{});
EXPECT_THAT(actual.body(), HasSubstr("Instance execution count: "));
}

TEST(ExamplesSiteTest, EnvVars) {
Expand Down

0 comments on commit 6a9c412

Please sign in to comment.