source code: py/probe_info_service/README.md
ChromeOS Probe Info Service¶
[TOC]
Overview¶
This project is still under active development.
Probe Info Service is an AppEngine service that manages component probe statements. The service leverages data from AVL system to generate the corresponding probe statements for the probe tool automatically. It also brings-up self-service mechanism to verify the data, and provides rich exception handling process to handle corner cases.
Folder Structure¶
$(factory-repo)/py/probe_info_servicecontains the main code base.$(factory-repo)/deploy/probe_info_service.shis the helper script to deploy or test the project.$(factory-private-repo)/config/probe_info_servicecontains all the confidential configurations.
Deployment¶
To deploy the service to staging environment, run
(factory-repo)$ ./deploy/probe_info_service.sh deploy staging
Testing¶
Unittest¶
Unittests modules are named with suffix _unittest.py. Because the working
environment of Probe Info Service is quite different than the factory framework
on DUT, make -C $(factory-repo) test ignores all unittest modules related
to Probe Info Service. Instead, developers should trigger the tests by
the helper script as follow:
(factory-repo)$ ./deploy/probe_info_service.sh unittest
Or run the specific unittest(s) and dump the log by the following command:
(factory-repo)$ ./deploy/probe_info_service.sh unittest --dump_logs \
[<absolute_unittest_module_names>...]
Manual Test¶
Following command starts the service on localhost:8080:
(factory-repo)$ ./deploy/probe_info_service.sh run
To invoke a ProtoRPC method call, one can send the request by curl commandline
tool. For example, following shell commands invoke
ProbeInfoService.GetProbeSchema.
(factory-repo)$ PKG_NAME="cros.factory.probe_info_service.app_engine.stubby_pb2"
(factory-repo)$ BASE_URL="http://localhost:8080/_ah/stubby"
(factory-repo)$ PROTOC_ARGS="-I py/probe_info_service/app_engine stubby.proto"
(factory-repo)$ \
echo -ne '' \
| protoc $PROTOC_ARGS --encode="${PKG_NAME}.GetProbeSchemaRequest" <<__EOF__ \
| curl --data-binary @- "${BASE_URL}/ProbeInfoService.GetProbeSchema" \
| protoc $PROTOC_ARGS --decode="${PKG_NAME}.GetProbeSchemaResponse"
Development Tip¶
Enable the IntelliSense¶
Some of the messages are defined in .proto protobuf file, which makes
the IntelliSense feature of those classes in Python failed by default.
However, developers can still bring the features up by re-using the
deployment flow, in which the .proto files are transformed into .py files.
The deployment flow roughly consists of following 3 steps:
make -C $(factory-repo)/py/probe_info_service preparegenerates all auto-generated files and put them in$(factory-repo)/build/probe_info_service/gen.make -C $(factory-repo)/py/probe_info_service _packcopies all required source files into the correct location in a temporary directory in preparation of AppEngine deployment.gcloud app deploy <tmp_dir>/app.yamldeploys the sources.
To enable IntelliSense, one can specify
$(factory-repo)/build/probe_info_service/gen as a path for python libraries
and manual run make prepare once .proto files are modified.
Reference¶
API Spec: http://go/cros-probe-info-service-spec
Design Doc: http://go/cros-probe-info-service-design