| // Copyright 2021 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include <fuchsia/component/cpp/fidl.h> |
| #include <fuchsia/component/test/cpp/fidl.h> |
| #include <zircon/assert.h> |
| #include <zircon/status.h> |
| |
| namespace component_testing { |
| namespace internal { |
| |
| const char* ConvertToString(fuchsia::component::test::RealmBuilderError2& error) { |
| switch (error) { |
| case fuchsia::component::test::RealmBuilderError2::CHILD_ALREADY_EXISTS: |
| return "CHILD_ALREADY_EXISTS"; |
| case fuchsia::component::test::RealmBuilderError2::INVALID_MANIFEST_EXTENSION: |
| return "INVALID_MANIFEST_EXTENSION"; |
| case fuchsia::component::test::RealmBuilderError2::INVALID_COMPONENT_DECL: |
| return "INVALID_COMPONENT_DECL"; |
| case fuchsia::component::test::RealmBuilderError2::NO_SUCH_CHILD: |
| return "NO_SUCH_CHILD"; |
| case fuchsia::component::test::RealmBuilderError2::CHILD_DECL_NOT_VISIBLE: |
| return "CHILD_DECL_NOT_VISIBLE"; |
| case fuchsia::component::test::RealmBuilderError2::NO_SUCH_SOURCE: |
| return "NO_SUCH_SOURCE"; |
| case fuchsia::component::test::RealmBuilderError2::NO_SUCH_TARGET: |
| return "NO_SUCH_TARGET"; |
| case fuchsia::component::test::RealmBuilderError2::CAPABILITIES_EMPTY: |
| return "CAPABILITIES_EMPTY"; |
| case fuchsia::component::test::RealmBuilderError2::TARGETS_EMPTY: |
| return "TARGETS_EMPTY"; |
| case fuchsia::component::test::RealmBuilderError2::SOURCE_AND_TARGET_MATCH: |
| return "SOURCE_AND_TARGET_MATCH"; |
| case fuchsia::component::test::RealmBuilderError2::DECL_NOT_FOUND: |
| return "DECL_NOT_FOUND"; |
| case fuchsia::component::test::RealmBuilderError2::DECL_READ_ERROR: |
| return "DECL_READ_ERROR"; |
| case fuchsia::component::test::RealmBuilderError2::BUILD_ALREADY_CALLED: |
| return "BUILD_ALREADY_CALLED"; |
| case fuchsia::component::test::RealmBuilderError2::CAPABILITY_INVALID: |
| return "CAPABILITY_INVALID"; |
| case fuchsia::component::test::RealmBuilderError2::INVALID_CHILD_REALM_HANDLE: |
| return "INVALID_CHILD_REALM_HANDLE"; |
| default: |
| return "UNKNOWN"; |
| } |
| } |
| |
| const char* ConvertToString(fuchsia::component::Error& error) { |
| switch (error) { |
| case fuchsia::component::Error::INTERNAL: |
| return "INTERNAL"; |
| case fuchsia::component::Error::INVALID_ARGUMENTS: |
| return "INVALID_ARGUMENTS"; |
| case fuchsia::component::Error::UNSUPPORTED: |
| return "UNSUPPORTED"; |
| case fuchsia::component::Error::ACCESS_DENIED: |
| return "ACCESS_DENIED"; |
| case fuchsia::component::Error::INSTANCE_NOT_FOUND: |
| return "INSTANCE_NOT_FOUND"; |
| case fuchsia::component::Error::INSTANCE_ALREADY_EXISTS: |
| return "INSTANCE_ALREADY_EXISTS"; |
| case fuchsia::component::Error::INSTANCE_CANNOT_START: |
| return "INSTANCE_CANNOT_START"; |
| case fuchsia::component::Error::INSTANCE_CANNOT_RESOLVE: |
| return "INSTANCE_CANNOT_RESOLVE"; |
| case fuchsia::component::Error::COLLECTION_NOT_FOUND: |
| return "COLLECTION_NOT_FOUND"; |
| case fuchsia::component::Error::RESOURCE_UNAVAILABLE: |
| return "RESOURCE_UNAVAILABLE"; |
| case fuchsia::component::Error::INSTANCE_DIED: |
| return "INSTANCE_DIED"; |
| default: |
| return "UNKNOWN"; |
| } |
| } |
| |
| void PanicWithMessage(const char* stacktrace, const char* context, zx_status_t status) { |
| ZX_PANIC("[%s] FIDL method %s failed with status: %s", stacktrace, context, |
| zx_status_get_string(status)); |
| } |
| |
| void PanicWithMessage(const char* stacktrace, const char* context, |
| fuchsia::component::test::RealmBuilderError2& error) { |
| ZX_PANIC("[%s] FIDL method %s failed with error: %s\n", stacktrace, context, |
| ConvertToString(error)); |
| } |
| |
| void PanicWithMessage(const char* stacktrace, const char* context, |
| fuchsia::component::Error& error) { |
| ZX_PANIC("[%s] FIDL method %s failed with error: %s\n", stacktrace, context, |
| ConvertToString(error)); |
| } |
| |
| } // namespace internal |
| } // namespace component_testing |