/* * 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 #include #include #include #include #include #include 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 { public: virtual void SetUp() override { auto rpcName = String16(GetParam().c_str()); String16 avfName = String16(IRemotelyProvisionedComponent::descriptor) + String16("/avf"); if (avfName == rpcName) { GTEST_SKIP() << "Skipping test for avf"; } rpc_ = android::waitForService(rpcName); ASSERT_NE(rpc_, nullptr); } sp rpc_; }; TEST_P(RkpdClientTest, getRpcKey) { std::optional 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(); }