firmware-provisioning: add to common.provision

Actually call firmware provisioning in the common.go provision struct

BUG=None
TEST=Not yet

Change-Id: I2eb0d232e13b86b50a9a4f380bd7880f83b1bb34
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/dev-util/+/3255615
Reviewed-by: Jaques Clapauch <jaquesc@google.com>
Commit-Queue: Sergey Frolov <sfrolov@google.com>
Tested-by: Sergey Frolov <sfrolov@google.com>
diff --git a/src/chromiumos/test/provision/cmd/provisionserver/common.go b/src/chromiumos/test/provision/cmd/provisionserver/common.go
index c59fabf..ddf1c6f 100644
--- a/src/chromiumos/test/provision/cmd/provisionserver/common.go
+++ b/src/chromiumos/test/provision/cmd/provisionserver/common.go
@@ -23,6 +23,7 @@
 	"chromiumos/test/provision/cmd/provisionserver/bootstrap/services"
 	"chromiumos/test/provision/cmd/provisionserver/bootstrap/services/ashservice"
 	"chromiumos/test/provision/cmd/provisionserver/bootstrap/services/crosservice"
+	"chromiumos/test/provision/cmd/provisionserver/bootstrap/services/firmwareservice"
 	"chromiumos/test/provision/cmd/provisionserver/bootstrap/services/lacrosservice"
 )
 
@@ -168,13 +169,22 @@
 }
 
 // installFirmware installs requested firmware to the DUT.
-//
-// TODO(shapiroc): Implement this
 func (s *provision) installFirmware(ctx context.Context, req *api.InstallFirmwareRequest, op *longrunning.Operation) (*api.InstallFailure, error) {
 	s.logger.Println("Received api.InstallFirmwareRequest: ", *req)
-	return &api.InstallFailure{
-		Reason: api.InstallFailure_REASON_PROVISIONING_FAILED,
-	}, fmt.Errorf("not implemented")
+	ls, err := firmwareservice.NewFirmwareService(s.dutName, s.dutClient, s.wiringConn, req)
+	if err != nil {
+		fr := &api.InstallFailure{
+			Reason: api.InstallFailure_REASON_PROVISIONING_FAILED,
+		}
+		s.setNewOperationError(
+			op,
+			codes.Aborted,
+			fmt.Sprintf("pre-provision: failed setup: %s", err),
+			fr.Reason.String(),
+		)
+		return fr, err
+	}
+	return s.execute(ctx, ls, op)
 }
 
 // execute effectively acts as a state transition runner for each of the