diff options
Diffstat (limited to 'provisioner/support/test.cpp')
-rw-r--r-- | provisioner/support/test.cpp | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/provisioner/support/test.cpp b/provisioner/support/test.cpp new file mode 100644 index 00000000..418eab9d --- /dev/null +++ b/provisioner/support/test.cpp @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include <aidl/Gtest.h> +#include <aidl/Vintf.h> +#include <android/hardware/security/keymint/IRemotelyProvisionedComponent.h> +#include <binder/IServiceManager.h> +#include <binder/ProcessState.h> +#include <gtest/gtest.h> +#include <rkp/support/rkpd_client.h> + +using ::android::getAidlHalInstanceNames; +using ::android::sp; +using ::android::String16; +using ::android::hardware::security::keymint::IRemotelyProvisionedComponent; +using ::android::security::rkp::RemotelyProvisionedKey; +using ::android::security::rkp::support::getRpcKey; + +// TODO(b/272600606): Add tests for error cases +class RkpdClientTest : public testing::TestWithParam<std::string> { + public: + virtual void SetUp() override { + auto rpcName = String16(GetParam().c_str()); + rpc_ = android::waitForService<IRemotelyProvisionedComponent>(rpcName); + ASSERT_NE(rpc_, nullptr); + } + + sp<IRemotelyProvisionedComponent> rpc_; +}; + +TEST_P(RkpdClientTest, getRpcKey) { + std::optional<RemotelyProvisionedKey> key = getRpcKey(rpc_, /*keyId=*/0); + + ASSERT_TRUE(key.has_value()) << "Failed to get remotely provisioned attestation key"; + ASSERT_FALSE(key->keyBlob.empty()) << "Key blob is empty"; + ASSERT_FALSE(key->encodedCertChain.empty()) << "Certificate is empty"; +} + +INSTANTIATE_TEST_SUITE_P( + PerInstance, RkpdClientTest, + testing::ValuesIn(getAidlHalInstanceNames(IRemotelyProvisionedComponent::descriptor)), + ::android::PrintInstanceNameToString); + +int main(int argc, char** argv) { + testing::InitGoogleTest(&argc, argv); + + // We need one thread to issue requests to RKPD and one to handle + // asynchronous responses from RKPD. + android::ProcessState::self()->setThreadPoolMaxThreadCount(2); + android::ProcessState::self()->startThreadPool(); + return RUN_ALL_TESTS(); +} |