From 6d152821a5667f7112ce8971dbfce58d1119efe6 Mon Sep 17 00:00:00 2001 From: Justin King Date: Thu, 8 Oct 2026 14:30:33 -0700 Subject: [PATCH] Change Activation attribute pattern mutators to return `absl::Status` PiperOrigin-RevId: 996074623 --- eval/compiler/BUILD | 1 + .../flat_expr_builder_comprehensions_test.cc | 9 +- ...ilder_short_circuiting_conformance_test.cc | 42 +++++--- eval/compiler/flat_expr_builder_test.cc | 4 +- eval/eval/BUILD | 7 +- eval/eval/comprehension_step_test.cc | 16 +-- eval/eval/container_access_step_test.cc | 3 +- eval/eval/create_list_step_test.cc | 12 ++- eval/eval/equality_steps_test.cc | 20 ++-- eval/eval/function_step_test.cc | 2 +- eval/eval/ident_step_test.cc | 16 +-- eval/eval/select_step_test.cc | 35 +++--- eval/public/BUILD | 1 + eval/public/activation.h | 15 ++- eval/public/activation_test.cc | 4 +- eval/tests/unknowns_end_to_end_test.cc | 94 +++++++++------- extensions/bindings_ext_test.cc | 61 ++++++----- extensions/select_optimization_test.cc | 31 +++--- runtime/BUILD | 1 + runtime/activation.h | 13 ++- runtime/activation_test.cc | 101 ++++++++++-------- 21 files changed, 296 insertions(+), 192 deletions(-) diff --git a/eval/compiler/BUILD b/eval/compiler/BUILD index e71c1cdf2..89677776c 100644 --- a/eval/compiler/BUILD +++ b/eval/compiler/BUILD @@ -511,6 +511,7 @@ cc_test( "//runtime/internal:runtime_env_testing", "@com_google_absl//absl/log:absl_check", "@com_google_absl//absl/status", + "@com_google_absl//absl/status:status_matchers", "@com_google_absl//absl/strings", "@com_google_protobuf//:protobuf", ], diff --git a/eval/compiler/flat_expr_builder_comprehensions_test.cc b/eval/compiler/flat_expr_builder_comprehensions_test.cc index 9d46d8dd8..ecea6058c 100644 --- a/eval/compiler/flat_expr_builder_comprehensions_test.cc +++ b/eval/compiler/flat_expr_builder_comprehensions_test.cc @@ -43,6 +43,7 @@ namespace google::api::expr::runtime { namespace { +using ::absl_testing::IsOk; using ::absl_testing::StatusIs; using ::cel::runtime_internal::NewTestingRuntimeEnv; using ::cel::expr::CheckedExpr; @@ -152,9 +153,11 @@ TEST_P(CelExpressionBuilderFlatImplComprehensionsTest, ListCompWithUnknowns) { &parsed_expr.source_info())); Activation activation; - activation.set_unknown_attribute_patterns({CelAttributePattern{ - "items", - {CreateCelAttributeQualifierPattern(CelValue::CreateInt64(1))}}}); + ASSERT_THAT( + activation.SetUnknownAttributePatterns({CelAttributePattern{ + "items", + {CreateCelAttributeQualifierPattern(CelValue::CreateInt64(1))}}}), + IsOk()); ContainerBackedListImpl list_impl = ContainerBackedListImpl({ CelValue::CreateInt64(1), // element items[1] is marked unknown, so the computation should produce diff --git a/eval/compiler/flat_expr_builder_short_circuiting_conformance_test.cc b/eval/compiler/flat_expr_builder_short_circuiting_conformance_test.cc index c00b66824..641ca9cd1 100644 --- a/eval/compiler/flat_expr_builder_short_circuiting_conformance_test.cc +++ b/eval/compiler/flat_expr_builder_short_circuiting_conformance_test.cc @@ -6,6 +6,7 @@ #include "absl/log/absl_check.h" #include "absl/status/status.h" +#include "absl/status/status_matchers.h" #include "absl/strings/str_cat.h" #include "absl/strings/string_view.h" #include "eval/compiler/cel_expression_builder_flat_impl.h" @@ -26,6 +27,7 @@ namespace google::api::expr::runtime { namespace { +using ::absl_testing::IsOk; using ::cel::runtime_internal::NewTestingRuntimeEnv; using ::cel::expr::Expr; using ::google::api::expr::parser::Parse; @@ -187,7 +189,9 @@ TEST_P(ShortCircuitingTest, UnknownAnd) { auto builder = GetBuilder(/* enable_unknowns=*/true); absl::Status error = absl::InternalError("error"); - activation.set_unknown_attribute_patterns({CelAttributePattern("var1", {})}); + ASSERT_THAT( + activation.SetUnknownAttributePatterns({CelAttributePattern("var1", {})}), + IsOk()); activation.InsertValue("var2", CelValue::CreateError(&error)); activation.InsertValue("var3", CelValue::CreateBool(false)); @@ -217,7 +221,9 @@ TEST_P(ShortCircuitingTest, UnknownOr) { auto builder = GetBuilder(/* enable_unknowns=*/true); absl::Status error = absl::InternalError("error"); - activation.set_unknown_attribute_patterns({CelAttributePattern("var1", {})}); + ASSERT_THAT( + activation.SetUnknownAttributePatterns({CelAttributePattern("var1", {})}), + IsOk()); activation.InsertValue("var2", CelValue::CreateError(&error)); activation.InsertValue("var3", CelValue::CreateBool(true)); @@ -307,7 +313,9 @@ TEST_P(ShortCircuitingTest, TernaryUnknownCondHandling) { activation.InsertValue("arg1", CelValue::CreateError(&error)); activation.InsertValue("arg2", CelValue::CreateInt64(-1)); - activation.set_unknown_attribute_patterns({CelAttributePattern("cond", {})}); + ASSERT_THAT( + activation.SetUnknownAttributePatterns({CelAttributePattern("cond", {})}), + IsOk()); CelValue result; ASSERT_NO_FATAL_FAILURE( @@ -319,9 +327,11 @@ TEST_P(ShortCircuitingTest, TernaryUnknownCondHandling) { EXPECT_THAT(attrs.begin()->variable_name(), Eq("cond")); // Unknown branches are discarded if condition is unknown - activation.set_unknown_attribute_patterns({CelAttributePattern("cond", {}), - CelAttributePattern("arg1", {}), - CelAttributePattern("arg2", {})}); + ASSERT_THAT( + activation.SetUnknownAttributePatterns({CelAttributePattern("cond", {}), + CelAttributePattern("arg1", {}), + CelAttributePattern("arg2", {})}), + IsOk()); ASSERT_NO_FATAL_FAILURE( BuildAndEval(builder.get(), expr, activation, &arena, &result)); @@ -344,7 +354,9 @@ TEST_P(ShortCircuitingTest, TernaryUnknownArgsHandling) { activation.InsertValue("arg2", CelValue::CreateInt64(-1)); // Unknown arg is discarded if condition chooses other branch. - activation.set_unknown_attribute_patterns({CelAttributePattern("arg1", {})}); + ASSERT_THAT( + activation.SetUnknownAttributePatterns({CelAttributePattern("arg1", {})}), + IsOk()); CelValue result; @@ -354,8 +366,10 @@ TEST_P(ShortCircuitingTest, TernaryUnknownArgsHandling) { EXPECT_EQ(result.Int64OrDie(), -1); // Branches won't merge if both are unknown. - activation.set_unknown_attribute_patterns( - {CelAttributePattern("arg1", {}), CelAttributePattern("arg2", {})}); + ASSERT_THAT( + activation.SetUnknownAttributePatterns( + {CelAttributePattern("arg1", {}), CelAttributePattern("arg2", {})}), + IsOk()); ASSERT_NO_FATAL_FAILURE( BuildAndEval(builder.get(), expr, activation, &arena, &result)); @@ -378,8 +392,10 @@ TEST_P(ShortCircuitingTest, TernaryUnknownAndErrorHandling) { activation.InsertValue("arg2", CelValue::CreateInt64(-1)); // Error cond discards args - activation.set_unknown_attribute_patterns( - {CelAttributePattern("arg1", {}), CelAttributePattern("arg2", {})}); + ASSERT_THAT( + activation.SetUnknownAttributePatterns( + {CelAttributePattern("arg1", {}), CelAttributePattern("arg2", {})}), + IsOk()); CelValue result; @@ -389,7 +405,9 @@ TEST_P(ShortCircuitingTest, TernaryUnknownAndErrorHandling) { EXPECT_EQ(*result.ErrorOrDie(), error); // Error arg discarded if condition unknown - activation.set_unknown_attribute_patterns({CelAttributePattern("cond", {})}); + ASSERT_THAT( + activation.SetUnknownAttributePatterns({CelAttributePattern("cond", {})}), + IsOk()); ASSERT_TRUE(activation.RemoveValueEntry("arg1")); activation.InsertValue("arg1", CelValue::CreateError(&error)); diff --git a/eval/compiler/flat_expr_builder_test.cc b/eval/compiler/flat_expr_builder_test.cc index 105060282..f7cde337b 100644 --- a/eval/compiler/flat_expr_builder_test.cc +++ b/eval/compiler/flat_expr_builder_test.cc @@ -2954,7 +2954,9 @@ TEST_P(FlatExprBuilderVariadicLogicalTest, Evaluate) { insert_value("c", test_case.c_val); if (!unknown_patterns.empty()) { - activation.set_unknown_attribute_patterns(std::move(unknown_patterns)); + ASSERT_THAT( + activation.SetUnknownAttributePatterns(std::move(unknown_patterns)), + IsOk()); } ASSERT_OK_AND_ASSIGN(CelValue result, cel_expr->Evaluate(activation, &arena)); diff --git a/eval/eval/BUILD b/eval/eval/BUILD index 6338b9461..ded2492ca 100644 --- a/eval/eval/BUILD +++ b/eval/eval/BUILD @@ -418,7 +418,6 @@ cc_test( deps = [ ":attribute_trail", ":direct_expression_step", - ":equality_steps", ":evaluator_core", "//base:attributes", "//common:value", @@ -452,7 +451,6 @@ cc_test( ":direct_expression_step", ":evaluator_core", ":expression_step_base", - ":ident_step", "//base:data", "//common:expr", "//common:value", @@ -469,7 +467,6 @@ cc_test( "//runtime:runtime_options", "//runtime/internal:runtime_env_testing", "//runtime/internal:runtime_type_provider", - "@com_google_absl//absl/memory", "@com_google_absl//absl/status", "@com_google_absl//absl/status:statusor", "@com_google_absl//absl/strings", @@ -519,7 +516,6 @@ cc_test( ":container_access_step", ":direct_expression_step", ":evaluator_core", - ":ident_step", "//base:builtins", "//base:data", "//common:ast", @@ -540,6 +536,7 @@ cc_test( "//runtime/internal:runtime_env", "//runtime/internal:runtime_env_testing", "@com_google_absl//absl/base:nullability", + "@com_google_absl//absl/log:absl_check", "@com_google_absl//absl/status", "@com_google_cel_spec//proto/cel/expr:syntax_cc_proto", "@com_google_protobuf//:protobuf", @@ -608,8 +605,6 @@ cc_test( ":const_value_step", ":direct_expression_step", ":evaluator_core", - ":function_step", - ":ident_step", "//base:builtins", "//base:data", "//common:constant", diff --git a/eval/eval/comprehension_step_test.cc b/eval/eval/comprehension_step_test.cc index 7725c4a73..09c4eb228 100644 --- a/eval/eval/comprehension_step_test.cc +++ b/eval/eval/comprehension_step_test.cc @@ -113,11 +113,13 @@ TEST_F(ListKeysStepTest, MapPartiallyUnknown) { (*value.mutable_fields())["key3"].set_number_value(3.0); activation.InsertValue("var", CelProtoWrapper::CreateMessage(&value, &arena)); - activation.set_unknown_attribute_patterns({CelAttributePattern( - "var", - {CreateCelAttributeQualifierPattern(CelValue::CreateStringView("key2")), - CreateCelAttributeQualifierPattern(CelValue::CreateStringView("foo")), - CelAttributeQualifierPattern::CreateWildcard()})}); + ASSERT_THAT(activation.SetUnknownAttributePatterns({CelAttributePattern( + "var", {CreateCelAttributeQualifierPattern( + CelValue::CreateStringView("key2")), + CreateCelAttributeQualifierPattern( + CelValue::CreateStringView("foo")), + CelAttributeQualifierPattern::CreateWildcard()})}), + IsOk()); auto eval_result = expression->Evaluate(activation, &arena); @@ -171,7 +173,9 @@ TEST_F(ListKeysStepTest, UnknownSetPassedThrough) { Activation activation; Arena arena; - activation.set_unknown_attribute_patterns({CelAttributePattern("var", {})}); + ASSERT_THAT( + activation.SetUnknownAttributePatterns({CelAttributePattern("var", {})}), + IsOk()); auto eval_result = expression->Evaluate(activation, &arena); diff --git a/eval/eval/container_access_step_test.cc b/eval/eval/container_access_step_test.cc index 5001c93ef..612732b43 100644 --- a/eval/eval/container_access_step_test.cc +++ b/eval/eval/container_access_step_test.cc @@ -9,6 +9,7 @@ #include "cel/expr/syntax.pb.h" #include "google/protobuf/struct.pb.h" #include "absl/base/nullability.h" +#include "absl/log/absl_check.h" #include "absl/status/status.h" #include "base/builtins.h" #include "base/type_provider.h" @@ -101,7 +102,7 @@ CelValue EvaluateAttributeHelper( activation.InsertValue("container", container); activation.InsertValue("key", key); - activation.set_unknown_attribute_patterns(patterns); + ABSL_CHECK_OK(activation.SetUnknownAttributePatterns(patterns)); // Crash OK auto result = cel_expr.Evaluate(activation, arena); return *result; } diff --git a/eval/eval/create_list_step_test.cc b/eval/eval/create_list_step_test.cc index 119504a14..96da03ed2 100644 --- a/eval/eval/create_list_step_test.cc +++ b/eval/eval/create_list_step_test.cc @@ -423,8 +423,10 @@ TEST(CreateDirectListStep, MissingAttribute) { cel::RuntimeOptions options; options.enable_missing_attribute_errors = true; - activation.SetMissingPatterns({cel::AttributePattern( - "var1", {cel::AttributeQualifierPattern::OfString("field1")})}); + ASSERT_THAT( + activation.SetMissingPatterns({cel::AttributePattern( + "var1", {cel::AttributeQualifierPattern::OfString("field1")})}), + IsOk()); ExecutionFrameBase frame(activation, options, type_provider, cel::internal::GetTestingDescriptorPool(), @@ -519,8 +521,10 @@ TEST(CreateDirectListStep, PartialUnknown) { cel::Activation activation; cel::RuntimeOptions options; options.unknown_processing = cel::UnknownProcessingOptions::kAttributeOnly; - activation.SetUnknownPatterns({cel::AttributePattern( - "var1", {cel::AttributeQualifierPattern::OfString("field1")})}); + ASSERT_THAT( + activation.SetUnknownPatterns({cel::AttributePattern( + "var1", {cel::AttributeQualifierPattern::OfString("field1")})}), + IsOk()); ExecutionFrameBase frame(activation, options, type_provider, cel::internal::GetTestingDescriptorPool(), diff --git a/eval/eval/equality_steps_test.cc b/eval/eval/equality_steps_test.cc index f479d5d3b..660bebeb8 100644 --- a/eval/eval/equality_steps_test.cc +++ b/eval/eval/equality_steps_test.cc @@ -94,8 +94,9 @@ TEST(RecursiveTest, PartialAttrUnknown) { std::make_unique(IntValue(1), cel::Attribute("foo")), std::make_unique(IntValue(2)), false, -1); - activation.SetUnknownPatterns({cel::AttributePattern( - "foo", {cel::AttributeQualifierPattern::OfString("bar")})}); + ASSERT_THAT(activation.SetUnknownPatterns({cel::AttributePattern( + "foo", {cel::AttributeQualifierPattern::OfString("bar")})}), + IsOk()); ExecutionFrameBase frame(activation, opts, type_provider, cel::internal::GetTestingDescriptorPool(), @@ -120,8 +121,9 @@ TEST(RecursiveTest, PartialAttrUnknownDisabled) { std::make_unique(IntValue(1), cel::Attribute("foo")), std::make_unique(IntValue(2)), false, -1); - activation.SetUnknownPatterns({cel::AttributePattern( - "foo", {cel::AttributeQualifierPattern::OfString("bar")})}); + ASSERT_THAT(activation.SetUnknownPatterns({cel::AttributePattern( + "foo", {cel::AttributeQualifierPattern::OfString("bar")})}), + IsOk()); ExecutionFrameBase frame(activation, opts, type_provider, cel::internal::GetTestingDescriptorPool(), cel::internal::GetTestingMessageFactory(), &arena); @@ -154,8 +156,9 @@ TEST(IterativeTest, PartialAttrUnknown) { std::make_unique(IntValue(2)))); steps.push_back(ExpressionStep::MakeFastEqualStep()); - activation.SetUnknownPatterns({cel::AttributePattern( - "foo", {cel::AttributeQualifierPattern::OfString("bar")})}); + ASSERT_THAT(activation.SetUnknownPatterns({cel::AttributePattern( + "foo", {cel::AttributeQualifierPattern::OfString("bar")})}), + IsOk()); ExecutionFrame frame(steps, activation, opts, state); @@ -185,8 +188,9 @@ TEST(IterativeTest, PartialAttrUnknownDisabled) { std::make_unique(IntValue(2)))); steps.push_back(ExpressionStep::MakeFastEqualStep()); - activation.SetUnknownPatterns({cel::AttributePattern( - "foo", {cel::AttributeQualifierPattern::OfString("bar")})}); + ASSERT_THAT(activation.SetUnknownPatterns({cel::AttributePattern( + "foo", {cel::AttributeQualifierPattern::OfString("bar")})}), + IsOk()); ExecutionFrame frame(steps, activation, opts, state); ASSERT_OK_AND_ASSIGN(Value result, frame.Evaluate()); diff --git a/eval/eval/function_step_test.cc b/eval/eval/function_step_test.cc index 2946a087a..c6de63d42 100644 --- a/eval/eval/function_step_test.cc +++ b/eval/eval/function_step_test.cc @@ -693,7 +693,7 @@ TEST_P(FunctionStepTestUnknowns, PartialUnknownHandlingTest) { // Set attribute pattern that marks attribute "param[true]" as unknown. // It should result in "param" being handled as partially unknown, which is // is handled as fully unknown when used as function input argument. - activation.set_unknown_attribute_patterns({pattern}); + ASSERT_THAT(activation.SetUnknownAttributePatterns({pattern}), IsOk()); ASSERT_OK_AND_ASSIGN(CelValue value, impl->Evaluate(activation, &arena)); ASSERT_TRUE(value.IsUnknownSet()); diff --git a/eval/eval/ident_step_test.cc b/eval/eval/ident_step_test.cc index f27eaf477..91b2cb986 100644 --- a/eval/eval/ident_step_test.cc +++ b/eval/eval/ident_step_test.cc @@ -114,7 +114,7 @@ TEST(IdentStepTest, DisableMissingAttributeErrorsOK) { EXPECT_THAT(result.StringOrDie().value(), Eq("test")); const CelAttributePattern pattern("name0", {}); - activation.set_missing_attribute_patterns({pattern}); + ASSERT_THAT(activation.SetMissingAttributePatterns({pattern}), IsOk()); status0 = impl.Evaluate(activation, &arena); ASSERT_THAT(status0, IsOk()); @@ -151,7 +151,7 @@ TEST(IdentStepTest, TestIdentStepMissingAttributeErrors) { EXPECT_THAT(result.StringOrDie().value(), Eq("test")); CelAttributePattern pattern("name0", {}); - activation.set_missing_attribute_patterns({pattern}); + ASSERT_THAT(activation.SetMissingAttributePatterns({pattern}), IsOk()); status0 = impl.Evaluate(activation, &arena); ASSERT_THAT(status0, IsOk()); @@ -182,7 +182,7 @@ TEST(IdentStepTest, TestIdentStepUnknownAttribute) { std::vector unknown_patterns; unknown_patterns.push_back(CelAttributePattern("name_bad", {})); - activation.set_unknown_attribute_patterns(unknown_patterns); + ASSERT_THAT(activation.SetUnknownAttributePatterns(unknown_patterns), IsOk()); auto status0 = impl.Evaluate(activation, &arena); ASSERT_THAT(status0, IsOk()); @@ -193,7 +193,7 @@ TEST(IdentStepTest, TestIdentStepUnknownAttribute) { unknown_patterns.push_back(CelAttributePattern("name0", {})); - activation.set_unknown_attribute_patterns(unknown_patterns); + ASSERT_THAT(activation.SetUnknownAttributePatterns(unknown_patterns), IsOk()); status0 = impl.Evaluate(activation, &arena); ASSERT_THAT(status0, IsOk()); @@ -234,7 +234,9 @@ TEST(DirectIdentStepTest, UnknownAttribute) { options.unknown_processing = cel::UnknownProcessingOptions::kAttributeOnly; activation.InsertOrAssignValue("var1", IntValue(42)); - activation.SetUnknownPatterns({CreateCelAttributePattern("var1", {})}); + ASSERT_THAT( + activation.SetUnknownPatterns({CreateCelAttributePattern("var1", {})}), + IsOk()); ExecutionFrameBase frame(activation, options, type_provider, cel::internal::GetTestingDescriptorPool(), @@ -259,7 +261,9 @@ TEST(DirectIdentStepTest, MissingAttribute) { options.enable_missing_attribute_errors = true; activation.InsertOrAssignValue("var1", IntValue(42)); - activation.SetMissingPatterns({CreateCelAttributePattern("var1", {})}); + ASSERT_THAT( + activation.SetMissingPatterns({CreateCelAttributePattern("var1", {})}), + IsOk()); ExecutionFrameBase frame(activation, options, type_provider, cel::internal::GetTestingDescriptorPool(), diff --git a/eval/eval/select_step_test.cc b/eval/eval/select_step_test.cc index a1e5b4a09..1fca8fa57 100644 --- a/eval/eval/select_step_test.cc +++ b/eval/eval/select_step_test.cc @@ -807,7 +807,7 @@ TEST_F(SelectStepTest, DisableMissingAttributeOK) { EXPECT_EQ(result.BoolOrDie(), true); CelAttributePattern pattern("message", {}); - activation.set_missing_attribute_patterns({pattern}); + ASSERT_THAT(activation.SetMissingAttributePatterns({pattern}), IsOk()); ASSERT_OK_AND_ASSIGN(result, cel_expr.Evaluate(activation, &arena_)); EXPECT_EQ(result.BoolOrDie(), true); @@ -853,7 +853,7 @@ TEST_F(SelectStepTest, UnrecoverableUnknownValueProducesError) { CelAttributePattern pattern("message", {CreateCelAttributeQualifierPattern( CelValue::CreateStringView("bool_value"))}); - activation.set_missing_attribute_patterns({pattern}); + ASSERT_THAT(activation.SetMissingAttributePatterns({pattern}), IsOk()); ASSERT_OK_AND_ASSIGN(result, cel_expr.Evaluate(activation, &arena_)); EXPECT_THAT(*result.ErrorOrDie(), @@ -897,7 +897,8 @@ TEST_F(SelectStepTest, UnknownPatternResolvesToUnknown) { Activation activation; activation.InsertValue("message", CelProtoWrapper::CreateMessage(&message, &arena_)); - activation.set_unknown_attribute_patterns(unknown_patterns); + ASSERT_THAT(activation.SetUnknownAttributePatterns(unknown_patterns), + IsOk()); ASSERT_OK_AND_ASSIGN(CelValue result, cel_expr.Evaluate(activation, &arena_)); @@ -914,7 +915,8 @@ TEST_F(SelectStepTest, UnknownPatternResolvesToUnknown) { Activation activation; activation.InsertValue("message", CelProtoWrapper::CreateMessage(&message, &arena_)); - activation.set_unknown_attribute_patterns(unknown_patterns); + ASSERT_THAT(activation.SetUnknownAttributePatterns(unknown_patterns), + IsOk()); ASSERT_OK_AND_ASSIGN(CelValue result, cel_expr.Evaluate(activation, &arena_)); @@ -929,7 +931,8 @@ TEST_F(SelectStepTest, UnknownPatternResolvesToUnknown) { Activation activation; activation.InsertValue("message", CelProtoWrapper::CreateMessage(&message, &arena_)); - activation.set_unknown_attribute_patterns(unknown_patterns); + ASSERT_THAT(activation.SetUnknownAttributePatterns(unknown_patterns), + IsOk()); ASSERT_OK_AND_ASSIGN(CelValue result, cel_expr.Evaluate(activation, &arena_)); @@ -943,7 +946,8 @@ TEST_F(SelectStepTest, UnknownPatternResolvesToUnknown) { Activation activation; activation.InsertValue("message", CelProtoWrapper::CreateMessage(&message, &arena_)); - activation.set_unknown_attribute_patterns(unknown_patterns); + ASSERT_THAT(activation.SetUnknownAttributePatterns(unknown_patterns), + IsOk()); ASSERT_OK_AND_ASSIGN(CelValue result, cel_expr.Evaluate(activation, &arena_)); @@ -958,7 +962,8 @@ TEST_F(SelectStepTest, UnknownPatternResolvesToUnknown) { Activation activation; activation.InsertValue("message", CelProtoWrapper::CreateMessage(&message, &arena_)); - activation.set_unknown_attribute_patterns(unknown_patterns); + ASSERT_THAT(activation.SetUnknownAttributePatterns(unknown_patterns), + IsOk()); ASSERT_OK_AND_ASSIGN(CelValue result, cel_expr.Evaluate(activation, &arena_)); @@ -1075,7 +1080,7 @@ TEST_F(SelectStepTest, TypedSelectStepUnknownPatternResolvesToUnknown) { Activation activation; activation.InsertValue("message", CelProtoWrapper::CreateMessage(&message, &arena_)); - activation.set_unknown_attribute_patterns(unknown_patterns); + ASSERT_THAT(activation.SetUnknownAttributePatterns(unknown_patterns), IsOk()); ASSERT_OK_AND_ASSIGN(CelValue result, cel_expr.Evaluate(activation, &arena_)); ASSERT_TRUE(result.IsUnknownSet()); @@ -1508,9 +1513,10 @@ TEST_F(DirectSelectStepTest, MissingAttributesToErrors) { TestAllTypes message; message.set_single_int64(1); activation.InsertOrAssignValue("test_all_types", TestWrapMessage(&message)); - activation.SetMissingPatterns({cel::AttributePattern( - "test_all_types", - {cel::AttributeQualifierPattern::OfString("single_int64")})}); + ASSERT_THAT(activation.SetMissingPatterns({cel::AttributePattern( + "test_all_types", + {cel::AttributeQualifierPattern::OfString("single_int64")})}), + IsOk()); ExecutionFrameBase frame(activation, options, type_provider_, cel::internal::GetTestingDescriptorPool(), @@ -1539,9 +1545,10 @@ TEST_F(DirectSelectStepTest, IdentifiesUnknowns) { TestAllTypes message; message.set_single_int64(1); activation.InsertOrAssignValue("test_all_types", TestWrapMessage(&message)); - activation.SetUnknownPatterns({cel::AttributePattern( - "test_all_types", - {cel::AttributeQualifierPattern::OfString("single_int64")})}); + ASSERT_THAT(activation.SetUnknownPatterns({cel::AttributePattern( + "test_all_types", + {cel::AttributeQualifierPattern::OfString("single_int64")})}), + IsOk()); ExecutionFrameBase frame(activation, options, type_provider_, cel::internal::GetTestingDescriptorPool(), diff --git a/eval/public/BUILD b/eval/public/BUILD index f432767fa..39ab6368d 100644 --- a/eval/public/BUILD +++ b/eval/public/BUILD @@ -185,6 +185,7 @@ cc_library( ":cel_value", ":cel_value_producer", "//runtime/internal:attribute_matcher", + "@com_google_absl//absl/base:core_headers", "@com_google_absl//absl/base:nullability", "@com_google_absl//absl/container:flat_hash_map", "@com_google_absl//absl/status", diff --git a/eval/public/activation.h b/eval/public/activation.h index 6f2bb59c1..e9d7740af 100644 --- a/eval/public/activation.h +++ b/eval/public/activation.h @@ -6,8 +6,10 @@ #include #include +#include "absl/base/attributes.h" #include "absl/base/nullability.h" #include "absl/container/flat_hash_map.h" +#include "absl/status/status.h" #include "absl/strings/string_view.h" #include "absl/types/optional.h" #include "eval/public/base_activation.h" @@ -77,9 +79,10 @@ class Activation : public BaseActivation { // // If a field access is found to match any of the provided patterns, the // result is treated as a missing attribute error. - void set_missing_attribute_patterns( + absl::Status SetMissingAttributePatterns( std::vector missing_attribute_patterns) { missing_attribute_patterns_ = std::move(missing_attribute_patterns); + return absl::OkStatus(); } const std::vector& missing_attribute_patterns() @@ -87,11 +90,19 @@ class Activation : public BaseActivation { return missing_attribute_patterns_; } + ABSL_DEPRECATED("Use SetUnknownAttributePatterns") + void set_unknown_attribute_patterns( + std::vector unknown_attribute_patterns) { + SetUnknownAttributePatterns(std::move(unknown_attribute_patterns)) + .IgnoreError(); + } + // Sets the collection of attribute patterns that will be recognized as // "unknown" values during expression evaluation. - void set_unknown_attribute_patterns( + absl::Status SetUnknownAttributePatterns( std::vector unknown_attribute_patterns) { unknown_attribute_patterns_ = std::move(unknown_attribute_patterns); + return absl::OkStatus(); } // Return the collection of attribute patterns that determine "unknown" diff --git a/eval/public/activation_test.cc b/eval/public/activation_test.cc index 238caf45e..33a0dfafe 100644 --- a/eval/public/activation_test.cc +++ b/eval/public/activation_test.cc @@ -20,6 +20,7 @@ namespace runtime { namespace { +using ::absl_testing::IsOk; using ::absl_testing::StatusIs; using ::cel::extensions::ProtoMemoryManager; using ::cel::expr::Expr; @@ -226,7 +227,8 @@ TEST(ActivationTest, ErrorPathTest) { CelAttributePattern::MatchType::FULL); EXPECT_TRUE(activation.missing_attribute_patterns().empty()); - activation.set_missing_attribute_patterns({destination_ip_pattern}); + ASSERT_THAT(activation.SetMissingAttributePatterns({destination_ip_pattern}), + IsOk()); EXPECT_EQ( activation.missing_attribute_patterns()[0].IsMatch(trail.attribute()), CelAttributePattern::MatchType::FULL); diff --git a/eval/tests/unknowns_end_to_end_test.cc b/eval/tests/unknowns_end_to_end_test.cc index b8132e42f..eaa9c163a 100644 --- a/eval/tests/unknowns_end_to_end_test.cc +++ b/eval/tests/unknowns_end_to_end_test.cc @@ -168,7 +168,9 @@ TEST_F(UnknownsTest, NoUnknowns) { TEST_F(UnknownsTest, UnknownAttributes) { PrepareBuilder(UnknownProcessingOptions::kAttributeOnly); - activation_.set_unknown_attribute_patterns({CelAttributePattern("var1", {})}); + ASSERT_THAT(activation_.SetUnknownAttributePatterns( + {CelAttributePattern("var1", {})}), + IsOk()); activation_.InsertValue("var2", CelValue::CreateInt64(3)); ASSERT_THAT(activation_.InsertFunction(std::make_unique( "F1", FunctionResponse::kTrue)), @@ -193,7 +195,9 @@ TEST_F(UnknownsTest, UnknownAttributes) { TEST_F(UnknownsTest, UnknownAttributesPruning) { PrepareBuilder(UnknownProcessingOptions::kAttributeOnly); - activation_.set_unknown_attribute_patterns({CelAttributePattern("var1", {})}); + ASSERT_THAT(activation_.SetUnknownAttributePatterns( + {CelAttributePattern("var1", {})}), + IsOk()); activation_.InsertValue("var2", CelValue::CreateInt64(5)); ASSERT_THAT(activation_.InsertFunction(std::make_unique( "F1", FunctionResponse::kTrue)), @@ -310,7 +314,9 @@ TEST_F(UnknownsTest, UnknownFunctions) { TEST_F(UnknownsTest, UnknownsMerge) { PrepareBuilder(UnknownProcessingOptions::kAttributeAndFunction); activation_.InsertValue("var1", CelValue::CreateInt64(5)); - activation_.set_unknown_attribute_patterns({CelAttributePattern("var2", {})}); + ASSERT_THAT(activation_.SetUnknownAttributePatterns( + {CelAttributePattern("var2", {})}), + IsOk()); ASSERT_THAT(activation_.InsertFunction(std::make_unique( "F1", FunctionResponse::kUnknown)), @@ -725,12 +731,15 @@ TEST(UnknownsIterAttrTest, IterAttributeTrail) { activation.InsertValue("var", CelProtoWrapper::CreateMessage(&list, &arena)); // var[1]['elem1'] is unknown - activation.set_unknown_attribute_patterns({CelAttributePattern( - "var", { - CreateCelAttributeQualifierPattern(CelValue::CreateInt64(1)), - CreateCelAttributeQualifierPattern( - CelValue::CreateStringView("elem1")), - })}); + ASSERT_THAT( + activation.SetUnknownAttributePatterns({CelAttributePattern( + "var", + { + CreateCelAttributeQualifierPattern(CelValue::CreateInt64(1)), + CreateCelAttributeQualifierPattern( + CelValue::CreateStringView("elem1")), + })}), + IsOk()); ASSERT_THAT(activation.InsertFunction(std::make_unique( "Fn", FunctionResponse::kFalse, CelValue::Type::kMap)), @@ -920,12 +929,15 @@ TEST(UnknownsIterAttrTest, IterAttributeTrailMap) { activation.InsertValue("var", CelProtoWrapper::CreateMessage(&list, &arena)); // var[1]['key'] is unknown - activation.set_unknown_attribute_patterns({CelAttributePattern( - "var", - { - CreateCelAttributeQualifierPattern(CelValue::CreateInt64(1)), - CreateCelAttributeQualifierPattern(CelValue::CreateStringView("key")), - })}); + ASSERT_THAT( + activation.SetUnknownAttributePatterns({CelAttributePattern( + "var", + { + CreateCelAttributeQualifierPattern(CelValue::CreateInt64(1)), + CreateCelAttributeQualifierPattern( + CelValue::CreateStringView("key")), + })}), + IsOk()); ASSERT_THAT(activation.InsertFunction(std::make_unique( "Fn", FunctionResponse::kFalse, CelValue::Type::kDouble)), @@ -1041,8 +1053,9 @@ TEST(UnknownsIterAttrTest, IterAttributeTrailExact) { unknown_attribute_patterns.push_back(CelAttributePattern( "list_var", {CreateCelAttributeQualifierPattern(CelValue::CreateInt64(0))})); - activation.set_unknown_attribute_patterns( - std::move(unknown_attribute_patterns)); + ASSERT_THAT(activation.SetUnknownAttributePatterns( + std::move(unknown_attribute_patterns)), + IsOk()); ASSERT_OK_AND_ASSIGN( auto plan, builder->CreateExpression(&expr.expr(), &expr.source_info())); @@ -1087,12 +1100,15 @@ TEST(UnknownsIterAttrTest, IterAttributeTrailFilterValues) { activation.InsertValue("var", CelProtoWrapper::CreateMessage(&list, &arena)); // var[1]['value_key'] is unknown - activation.set_unknown_attribute_patterns({CelAttributePattern( - "var", { - CreateCelAttributeQualifierPattern(CelValue::CreateInt64(1)), - CreateCelAttributeQualifierPattern( - CelValue::CreateStringView("value_key")), - })}); + ASSERT_THAT( + activation.SetUnknownAttributePatterns({CelAttributePattern( + "var", + { + CreateCelAttributeQualifierPattern(CelValue::CreateInt64(1)), + CreateCelAttributeQualifierPattern( + CelValue::CreateStringView("value_key")), + })}), + IsOk()); auto plan = builder->CreateExpression(&expr, nullptr).value(); CelValue response = plan->Evaluate(activation, &arena).value(); @@ -1136,21 +1152,23 @@ TEST(UnknownsIterAttrTest, IterAttributeTrailFilterConditions) { activation.InsertValue("var", CelProtoWrapper::CreateMessage(&list, &arena)); // var[1]['value_key'] is unknown - activation.set_unknown_attribute_patterns( - {CelAttributePattern( - "var", - { - CreateCelAttributeQualifierPattern(CelValue::CreateInt64(1)), - CreateCelAttributeQualifierPattern( - CelValue::CreateStringView("filter_key")), - }), - CelAttributePattern( - "var", - { - CreateCelAttributeQualifierPattern(CelValue::CreateInt64(0)), - CreateCelAttributeQualifierPattern( - CelValue::CreateStringView("filter_key")), - })}); + ASSERT_THAT( + activation.SetUnknownAttributePatterns( + {CelAttributePattern( + "var", + { + CreateCelAttributeQualifierPattern(CelValue::CreateInt64(1)), + CreateCelAttributeQualifierPattern( + CelValue::CreateStringView("filter_key")), + }), + CelAttributePattern( + "var", + { + CreateCelAttributeQualifierPattern(CelValue::CreateInt64(0)), + CreateCelAttributeQualifierPattern( + CelValue::CreateStringView("filter_key")), + })}), + IsOk()); auto plan = builder->CreateExpression(&expr, nullptr).value(); CelValue response = plan->Evaluate(activation, &arena).value(); diff --git a/extensions/bindings_ext_test.cc b/extensions/bindings_ext_test.cc index c8b12c24a..3c396616c 100644 --- a/extensions/bindings_ext_test.cc +++ b/extensions/bindings_ext_test.cc @@ -624,9 +624,10 @@ TEST_P(BindingsExtInteractionsTest, UnknownAttributesSelectOptimization) { ASSERT_OK_AND_ASSIGN(auto cel_expr, builder->CreateExpression(&expr)); Arena arena; Activation activation; - activation.set_unknown_attribute_patterns({AttributePattern( - "msg", {AttributeQualifierPattern::OfString("child"), - AttributeQualifierPattern::OfString("child")})}); + ASSERT_THAT(activation.SetUnknownAttributePatterns({AttributePattern( + "msg", {AttributeQualifierPattern::OfString("child"), + AttributeQualifierPattern::OfString("child")})}), + IsOk()); NestedTestAllTypes msg; msg.mutable_child()->mutable_child()->mutable_payload()->set_single_int64(42); @@ -662,11 +663,13 @@ TEST_P(BindingsExtInteractionsTest, ASSERT_OK_AND_ASSIGN(auto cel_expr, builder->CreateExpression(&expr)); Arena arena; Activation activation; - activation.set_unknown_attribute_patterns({AttributePattern( - "msg", {AttributeQualifierPattern::OfString("child"), - AttributeQualifierPattern::OfString("child"), - AttributeQualifierPattern::OfString("payload"), - AttributeQualifierPattern::OfString("single_int64")})}); + ASSERT_THAT( + activation.SetUnknownAttributePatterns({AttributePattern( + "msg", {AttributeQualifierPattern::OfString("child"), + AttributeQualifierPattern::OfString("child"), + AttributeQualifierPattern::OfString("payload"), + AttributeQualifierPattern::OfString("single_int64")})}), + IsOk()); NestedTestAllTypes msg; msg.mutable_child()->mutable_child()->mutable_payload()->set_single_int64(42); @@ -703,11 +706,13 @@ TEST_P(BindingsExtInteractionsTest, MissingAttributesSelectOptimization) { ASSERT_OK_AND_ASSIGN(auto cel_expr, builder->CreateExpression(&expr)); Arena arena; Activation activation; - activation.set_missing_attribute_patterns({AttributePattern( - "msg", {AttributeQualifierPattern::OfString("child"), - AttributeQualifierPattern::OfString("child"), - AttributeQualifierPattern::OfString("payload"), - AttributeQualifierPattern::OfString("single_int64")})}); + ASSERT_THAT( + activation.SetMissingAttributePatterns({AttributePattern( + "msg", {AttributeQualifierPattern::OfString("child"), + AttributeQualifierPattern::OfString("child"), + AttributeQualifierPattern::OfString("payload"), + AttributeQualifierPattern::OfString("single_int64")})}), + IsOk()); NestedTestAllTypes msg; msg.mutable_child()->mutable_child()->mutable_payload()->set_single_int64(42); @@ -751,10 +756,12 @@ TEST_P(BindingsExtInteractionsTest, UnknownAttribute) { &expr.expr(), &expr.source_info())); Arena arena; Activation activation; - activation.set_unknown_attribute_patterns({AttributePattern( - "msg", {AttributeQualifierPattern::OfString("child"), - AttributeQualifierPattern::OfString("payload"), - AttributeQualifierPattern::OfString("single_int64")})}); + ASSERT_THAT( + activation.SetUnknownAttributePatterns({AttributePattern( + "msg", {AttributeQualifierPattern::OfString("child"), + AttributeQualifierPattern::OfString("payload"), + AttributeQualifierPattern::OfString("single_int64")})}), + IsOk()); NestedTestAllTypes msg; msg.mutable_child()->mutable_child()->mutable_payload()->set_single_int64(42); @@ -797,10 +804,12 @@ TEST_P(BindingsExtInteractionsTest, UnknownAttributeReturnValue) { &expr.expr(), &expr.source_info())); Arena arena; Activation activation; - activation.set_unknown_attribute_patterns({AttributePattern( - "msg", {AttributeQualifierPattern::OfString("child"), - AttributeQualifierPattern::OfString("payload"), - AttributeQualifierPattern::OfString("single_int64")})}); + ASSERT_THAT( + activation.SetUnknownAttributePatterns({AttributePattern( + "msg", {AttributeQualifierPattern::OfString("child"), + AttributeQualifierPattern::OfString("payload"), + AttributeQualifierPattern::OfString("single_int64")})}), + IsOk()); NestedTestAllTypes msg; msg.mutable_child()->mutable_child()->mutable_payload()->set_single_int64(42); @@ -847,10 +856,12 @@ TEST_P(BindingsExtInteractionsTest, MissingAttribute) { &expr.expr(), &expr.source_info())); Arena arena; Activation activation; - activation.set_missing_attribute_patterns({AttributePattern( - "msg", {AttributeQualifierPattern::OfString("child"), - AttributeQualifierPattern::OfString("payload"), - AttributeQualifierPattern::OfString("single_int64")})}); + ASSERT_THAT( + activation.SetMissingAttributePatterns({AttributePattern( + "msg", {AttributeQualifierPattern::OfString("child"), + AttributeQualifierPattern::OfString("payload"), + AttributeQualifierPattern::OfString("single_int64")})}), + IsOk()); NestedTestAllTypes msg; msg.mutable_child()->mutable_child()->mutable_payload()->set_single_int64(42); diff --git a/extensions/select_optimization_test.cc b/extensions/select_optimization_test.cc index ecc78ae9e..619db4a07 100644 --- a/extensions/select_optimization_test.cc +++ b/extensions/select_optimization_test.cc @@ -842,12 +842,13 @@ TEST_F(SelectOptimizationTest, MissingAttributeIndependentOfUnknown) { // activation only uses a ptr to the underlying message, persist them. NestedTestAllTypes var; - act.SetMissingPatterns( - {AttributePattern("nested_test_all_types", - { - AttributeQualifierPattern::OfString("child"), - AttributeQualifierPattern::OfString("payload"), - })}); + ASSERT_THAT(act.SetMissingPatterns({AttributePattern( + "nested_test_all_types", + { + AttributeQualifierPattern::OfString("child"), + AttributeQualifierPattern::OfString("payload"), + })}), + IsOk()); ASSERT_TRUE(google::protobuf::TextFormat::ParseFromString( R"pb( @@ -1268,10 +1269,9 @@ INSTANTIATE_TEST_SUITE_P( child { child { payload { single_int64: -42 } } } )pb"}}, [](google::protobuf::Arena*, Activation& act) { - act.SetUnknownPatterns({AttributePattern( + return act.SetUnknownPatterns({AttributePattern( "b", {AttributeQualifierPattern::OfString("child"), AttributeQualifierPattern::OfString("child")})}); - return absl::OkStatus(); }, [](const absl::StatusOr& got) { @@ -1297,11 +1297,10 @@ INSTANTIATE_TEST_SUITE_P( child { child { payload { single_int64: -42 } } } )pb"}}, [](google::protobuf::Arena*, Activation& act) { - act.SetUnknownPatterns({AttributePattern( + return act.SetUnknownPatterns({AttributePattern( "b", {AttributeQualifierPattern::OfString("child"), AttributeQualifierPattern::OfString("child"), AttributeQualifierPattern::OfString("child")})}); - return absl::OkStatus(); }, [](const absl::StatusOr& got) { @@ -1319,10 +1318,9 @@ INSTANTIATE_TEST_SUITE_P( child { child { payload { single_int64: -42 } } } )pb"}}, [](google::protobuf::Arena*, Activation& act) { - act.SetUnknownPatterns({ + return act.SetUnknownPatterns({ AttributePattern("b", {}), }); - return absl::OkStatus(); }, [](const absl::StatusOr& got) { @@ -1343,10 +1341,9 @@ INSTANTIATE_TEST_SUITE_P( child { child { payload { single_int64: -42 } } } )pb"}}, [](google::protobuf::Arena*, Activation& act) { - act.SetUnknownPatterns({ + return act.SetUnknownPatterns({ AttributePattern("a", {}), }); - return absl::OkStatus(); }, [](const absl::StatusOr& got) { ASSERT_OK_AND_ASSIGN(Value result, got); @@ -1363,12 +1360,11 @@ INSTANTIATE_TEST_SUITE_P( child { payload { standalone_message { bb: 20 } } } )pb"}}, [](google::protobuf::Arena*, Activation& act) { - act.SetMissingPatterns({AttributePattern( + return act.SetMissingPatterns({AttributePattern( "nested_test_all_types", { AttributeQualifierPattern::OfString("child"), })}); - return absl::OkStatus(); }, [](const absl::StatusOr& got) { @@ -1388,10 +1384,9 @@ INSTANTIATE_TEST_SUITE_P( child { payload { standalone_message { bb: 20 } } } )pb"}}, [](google::protobuf::Arena*, Activation& act) { - act.SetMissingPatterns({AttributePattern( + return act.SetMissingPatterns({AttributePattern( "b", {AttributeQualifierPattern::OfString("child"), AttributeQualifierPattern::OfString("child")})}); - return absl::OkStatus(); }, [](const absl::StatusOr& got) { diff --git a/runtime/BUILD b/runtime/BUILD index 84cf40e75..08e137669 100644 --- a/runtime/BUILD +++ b/runtime/BUILD @@ -78,6 +78,7 @@ cc_library( "@com_google_absl//absl/container:flat_hash_map", "@com_google_absl//absl/functional:any_invocable", "@com_google_absl//absl/log:absl_check", + "@com_google_absl//absl/status", "@com_google_absl//absl/status:statusor", "@com_google_absl//absl/strings", "@com_google_absl//absl/synchronization", diff --git a/runtime/activation.h b/runtime/activation.h index 8c4fb4073..0d647c32e 100644 --- a/runtime/activation.h +++ b/runtime/activation.h @@ -23,6 +23,7 @@ #include "absl/base/nullability.h" #include "absl/container/flat_hash_map.h" #include "absl/functional/any_invocable.h" +#include "absl/status/status.h" #include "absl/status/statusor.h" #include "absl/strings/string_view.h" #include "absl/synchronization/mutex.h" @@ -97,20 +98,24 @@ class Activation final : public ActivationInterface { bool InsertOrAssignValueProvider(absl::string_view name, ValueProvider provider); - void AddUnknownPattern(cel::AttributePattern pattern) { + absl::Status AddUnknownPattern(cel::AttributePattern pattern) { unknown_patterns_.push_back(std::move(pattern)); + return absl::OkStatus(); } - void SetUnknownPatterns(std::vector patterns) { + absl::Status SetUnknownPatterns(std::vector patterns) { unknown_patterns_ = std::move(patterns); + return absl::OkStatus(); } - void AddMissingPattern(cel::AttributePattern pattern) { + absl::Status AddMissingPattern(cel::AttributePattern pattern) { missing_patterns_.push_back(std::move(pattern)); + return absl::OkStatus(); } - void SetMissingPatterns(std::vector patterns) { + absl::Status SetMissingPatterns(std::vector patterns) { missing_patterns_ = std::move(patterns); + return absl::OkStatus(); } // Returns true if the function was inserted (no other registered function has diff --git a/runtime/activation_test.cc b/runtime/activation_test.cc index 108ed7978..780258464 100644 --- a/runtime/activation_test.cc +++ b/runtime/activation_test.cc @@ -39,6 +39,7 @@ namespace cel { namespace { +using ::absl_testing::IsOk; using ::absl_testing::IsOkAndHolds; using ::absl_testing::StatusIs; using testing::ElementsAre; @@ -212,11 +213,13 @@ TEST_F(ActivationTest, ValuesAndProvidersShareNamespace) { TEST_F(ActivationTest, SetUnknownAttributes) { Activation activation; - activation.SetUnknownPatterns( - {AttributePattern("var1", - {AttributeQualifierPattern::OfString("field1")}), - AttributePattern("var1", - {AttributeQualifierPattern::OfString("field2")})}); + ASSERT_THAT( + activation.SetUnknownPatterns( + {AttributePattern("var1", + {AttributeQualifierPattern::OfString("field1")}), + AttributePattern("var1", + {AttributeQualifierPattern::OfString("field2")})}), + IsOk()); EXPECT_THAT( activation.GetUnknownAttributes(), @@ -229,12 +232,14 @@ TEST_F(ActivationTest, SetUnknownAttributes) { TEST_F(ActivationTest, ClearUnknownAttributes) { Activation activation; - activation.SetUnknownPatterns( - {AttributePattern("var1", - {AttributeQualifierPattern::OfString("field1")}), - AttributePattern("var1", - {AttributeQualifierPattern::OfString("field2")})}); - activation.SetUnknownPatterns({}); + ASSERT_THAT( + activation.SetUnknownPatterns( + {AttributePattern("var1", + {AttributeQualifierPattern::OfString("field1")}), + AttributePattern("var1", + {AttributeQualifierPattern::OfString("field2")})}), + IsOk()); + ASSERT_THAT(activation.SetUnknownPatterns({}), IsOk()); EXPECT_THAT(activation.GetUnknownAttributes(), IsEmpty()); } @@ -242,11 +247,13 @@ TEST_F(ActivationTest, ClearUnknownAttributes) { TEST_F(ActivationTest, SetMissingAttributes) { Activation activation; - activation.SetMissingPatterns( - {AttributePattern("var1", - {AttributeQualifierPattern::OfString("field1")}), - AttributePattern("var1", - {AttributeQualifierPattern::OfString("field2")})}); + ASSERT_THAT( + activation.SetMissingPatterns( + {AttributePattern("var1", + {AttributeQualifierPattern::OfString("field1")}), + AttributePattern("var1", + {AttributeQualifierPattern::OfString("field2")})}), + IsOk()); EXPECT_THAT( activation.GetMissingAttributes(), @@ -259,12 +266,14 @@ TEST_F(ActivationTest, SetMissingAttributes) { TEST_F(ActivationTest, ClearMissingAttributes) { Activation activation; - activation.SetMissingPatterns( - {AttributePattern("var1", - {AttributeQualifierPattern::OfString("field1")}), - AttributePattern("var1", - {AttributeQualifierPattern::OfString("field2")})}); - activation.SetMissingPatterns({}); + ASSERT_THAT( + activation.SetMissingPatterns( + {AttributePattern("var1", + {AttributeQualifierPattern::OfString("field1")}), + AttributePattern("var1", + {AttributeQualifierPattern::OfString("field2")})}), + IsOk()); + ASSERT_THAT(activation.SetMissingPatterns({}), IsOk()); EXPECT_THAT(activation.GetMissingAttributes(), IsEmpty()); } @@ -327,16 +336,20 @@ TEST_F(ActivationTest, MoveAssignment) { [](absl::string_view name, const google::protobuf::DescriptorPool* absl_nonnull, google::protobuf::MessageFactory* absl_nonnull, google::protobuf::Arena* absl_nonnull) -> absl::StatusOr> { return IntValue(42); })); - moved_from.SetUnknownPatterns( - {AttributePattern("var1", - {AttributeQualifierPattern::OfString("field1")}), - AttributePattern("var1", - {AttributeQualifierPattern::OfString("field2")})}); - moved_from.SetMissingPatterns( - {AttributePattern("var1", - {AttributeQualifierPattern::OfString("field1")}), - AttributePattern("var1", - {AttributeQualifierPattern::OfString("field2")})}); + ASSERT_THAT( + moved_from.SetUnknownPatterns( + {AttributePattern("var1", + {AttributeQualifierPattern::OfString("field1")}), + AttributePattern("var1", + {AttributeQualifierPattern::OfString("field2")})}), + IsOk()); + ASSERT_THAT( + moved_from.SetMissingPatterns( + {AttributePattern("var1", + {AttributeQualifierPattern::OfString("field1")}), + AttributePattern("var1", + {AttributeQualifierPattern::OfString("field2")})}), + IsOk()); Activation moved_to; moved_to = std::move(moved_from); @@ -378,16 +391,20 @@ TEST_F(ActivationTest, MoveCtor) { [](absl::string_view name, const google::protobuf::DescriptorPool* absl_nonnull, google::protobuf::MessageFactory* absl_nonnull, google::protobuf::Arena* absl_nonnull) -> absl::StatusOr> { return IntValue(42); })); - moved_from.SetUnknownPatterns( - {AttributePattern("var1", - {AttributeQualifierPattern::OfString("field1")}), - AttributePattern("var1", - {AttributeQualifierPattern::OfString("field2")})}); - moved_from.SetMissingPatterns( - {AttributePattern("var1", - {AttributeQualifierPattern::OfString("field1")}), - AttributePattern("var1", - {AttributeQualifierPattern::OfString("field2")})}); + ASSERT_THAT( + moved_from.SetUnknownPatterns( + {AttributePattern("var1", + {AttributeQualifierPattern::OfString("field1")}), + AttributePattern("var1", + {AttributeQualifierPattern::OfString("field2")})}), + IsOk()); + ASSERT_THAT( + moved_from.SetMissingPatterns( + {AttributePattern("var1", + {AttributeQualifierPattern::OfString("field1")}), + AttributePattern("var1", + {AttributeQualifierPattern::OfString("field2")})}), + IsOk()); Activation moved_to = std::move(moved_from);