1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
|
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/test/base/chromeos/crosier/ash_integration_test.h"
#include "chrome/test/base/chromeos/crosier/upstart.h"
#include "chromeos/services/machine_learning/public/cpp/service_connection.h"
#include "chromeos/services/machine_learning/public/mojom/model.mojom.h"
namespace chromeos::machine_learning {
namespace {
using MLIntegrationTest = AshIntegrationTest;
} // namespace
IN_PROC_BROWSER_TEST_F(MLIntegrationTest, Bootstrap) {
std::string ml_service = "ml-service";
std::vector<std::string> extra_args{"TASK=mojo_service"};
base::RunLoop run_loop;
// Ensure the ml-service is stopped before testing startup.
ASSERT_TRUE(upstart::StopJob(ml_service, extra_args));
ASSERT_TRUE(upstart::WaitForJobStatus(
ml_service, upstart::Goal::kStop, upstart::State::kWaiting,
upstart::WrongGoalPolicy::kReject, extra_args));
// If the job is killed, we have to wait until ServiceConnection's disconnect
// handler is triggered before executing the remaining parts of the test.
run_loop.RunUntilIdle();
mojo::Remote<chromeos::machine_learning::mojom::Model> model;
// Load a model. This should start the ML service.
chromeos::machine_learning::ServiceConnection::GetInstance()
->GetMachineLearningService()
.LoadBuiltinModel(
chromeos::machine_learning::mojom::BuiltinModelSpec::New(
chromeos::machine_learning::mojom::BuiltinModelId::TEST_MODEL),
model.BindNewPipeAndPassReceiver(),
base::BindLambdaForTesting(
[&run_loop](mojom::LoadModelResult result) {
EXPECT_EQ(result, mojom::LoadModelResult::OK);
run_loop.Quit();
}));
// Catch any errors talking to the ML service.
model.set_disconnect_handler(
base::BindOnce([]() { FAIL() << "ML service connection error"; }));
// LoadBuiltinModel() above will quit the loop when the model is loaded.
run_loop.Run();
// Verify that the service was started.
ASSERT_TRUE(upstart::WaitForJobStatus(
ml_service, upstart::Goal::kStart, upstart::State::kRunning,
upstart::WrongGoalPolicy::kReject, extra_args));
}
} // namespace chromeos::machine_learning
|