Как установить загрузку / приложение в удаленную сессию фермы устройств - PullRequest
0 голосов
/ 03 мая 2019

Я столкнулся с проблемой в devicefarm.installToRemoteAccessSession .

Я успешно могу создать удаленный сеанс, используя aws-sdk из лямбда-функции. Затем я попытался установить уже существующую загрузку в созданный удаленный сеанс.

code

 let remoteSession = await devicefarm.createRemoteAccessSession(params).promise()
.then(res => {
      console.log(res);
      let installParm = {
        appArn: uploadArn,
        remoteAccessSessionArn: res.remoteAccessSession.arn
      };
      devicefarm.installToRemoteAccessSession(installParm).promise()
      .then(res => console.log(res))
      .catch(err => console.log(err));
      return res;
    })
    .catch(err => err);

Я получаю сообщение об ошибке ниже. [Я заменил идентификаторы на *]

message: 'Invalid parameters RemoteAccessSession or Upload with identifiers: arn:aws:devicefarm:us-west-2:*:session:**/**/00000 or arn:aws:devicefarm:us-west-2:*:upload:***/**.',
code: 'ArgumentException',

Могу ли я дать загрузить ARN для appArn . в чем разница между этими двумя? Если appARN или другой, где я могу получить?

1 Ответ

1 голос
/ 03 мая 2019

Таким образом, причина в моем случае после того, как я воспроизвел это, была в том, что сеанс удаленного доступа еще не начался. Я запросил один, но служба Device Farm не получила устройство одновременно, как ожидается.

После того, как я дождался начала сеанса с просмотра веб-консоли, загрузка прошла успешно. Таким образом, код должен иметь некоторую проверку там, чтобы увидеть состояние сеанса удаленного доступа с помощью get-remote-access call и возвращенного атрибута состояния.

Обновление

Я написал этот код javascript для ожидания перехода удаленного сеанса в состояние RUNNING.

// assume we already executed `npm install aws-sdk`
var AWS = require('aws-sdk');
// assumes `npm install https`
const request = require("request");
// assumes `npm install fs`
const fs = require('fs');
// https://stackoverflow.com/a/41641607/8016330
const sleep = (waitTimeInMs) => new Promise(resolve => setTimeout(resolve, waitTimeInMs));
// Device Farm is only available in the us-west-2 region
var devicefarm = new AWS.DeviceFarm({ region: 'us-west-2' });

let params = {
    name: "test of remote access"
};
devicefarm.createProject(params).promise().then(
    function (data) {
        /* process the data */
        console.log("created project", "Result: ", data.project.arn);
        let project = data.project;
        let params = {
            name: "app-debug.apk",
            type: "ANDROID_APP",
            projectArn: project.arn
        };
        devicefarm.createUpload(params).promise().then(
            function (data) {
                console.log("Created upload object successfully", "upload arn: ", data.upload.arn);
                console.log("uploading file...");

                var options = {
                    method: 'PUT',
                    url: data.upload.url,
                    headers: {},
                    body: fs.readFileSync("./aws-device-farm-sample-app-for-android/app/build/outputs/apk/app-debug.apk")
                };

                new Promise(function (resolve, reject) {
                    request(options, function (error, response, body) {
                        if (error) {
                            reject(error);
                        }
                        resolve(data);
                    });
                }).then(function (data) {
                    console.log("successfully uploaded file");
                    console.log("waiting for the sdk to finish processing");

                    getUploadStatusAndCreateRemoteSession(data.upload.arn,project).then(function (status) {
                        if (status == "SUCCEEDED") {

                        }

                    });
                }).catch(function (err) {
                    console.error("Error uploading file", "Error: ", err);
                });
            },
            function (error) {
                console.error("Error creating upload object", "Error: ", error);
            }
        );
    },
    function (error) {
        console.error("Error creating project", "Error: ", error);
    }
)

async function getUploadStatusAndCreateRemoteSession(uploadarn,project) {
    await devicefarm.getUpload({ arn: uploadarn }).promise().then(
        function (data) {
            console.log("getting upload status is successful", "Status: ", data.upload.status);
            if (data.upload.status != "SUCCEEDED") {
                sleep(5000).then(() => {
                    getUploadStatusAndCreateRemoteSession(data.upload.arn,project);
                });
            } else {
                // return data.upload.status;
                devicefarm.createRemoteAccessSession({
                    projectArn: project.arn,
                    deviceArn: 'arn:aws:devicefarm:us-west-2::device:CF6DC11E4C99430BA9A1BABAE5B45364'
                }).promise().then(
                    function (session) {
                        //get session status
                        getSessionStatus(session.remoteAccessSession.arn,uploadarn);
                    },
                    function (error) {
                        console.error("Error creating remote access sesssion", "Error", error);
                    }
                );
            }
        },
        function (error) {
            console.error("Failure getting upload", "Error: ", error);
            return error;
        }
    );
}

async function getSessionStatus(sessionArn,upload) {
    await devicefarm.getRemoteAccessSession({ arn: sessionArn }).promise().then(
        function (data) {
            console.log("getting session status is successful", "Status: ", data.remoteAccessSession.status);
            if (data.remoteAccessSession.status != "RUNNING") {
                sleep(5000).then(() => {
                    getSessionStatus(sessionArn,upload);
                });
            } else {

                console.log("Remote access session started!", "Installing app...");
                let installParm = {
                    appArn: upload,
                    remoteAccessSessionArn: sessionArn
                };
                devicefarm.installToRemoteAccessSession(installParm, function (err, data) {
                    if (err) console.error(err);
                    else console.log(data);
                });

            }
        },
        function (error) {
            console.error("Failure getting session", "Error: ", error);
            return error;
        }
    );
}

выход

created project Result:  arn:aws:devicefarm:us-west-2:111122223333:project:42ca0449-2714-4dd8-848f-ae9ef6655efb
Created upload object successfully upload arn:  arn:aws:devicefarm:us-west-2:111122223333:upload:42ca0449-2714-4dd8-848f-ae9ef6655efb/cd200f8e-e7f7-4d18-a4ee-32ad959a0786
uploading file...
successfully uploaded file
waiting for the sdk to finish processing
getting upload status is successful Status:  PROCESSING
getting upload status is successful Status:  SUCCEEDED
getting session status is successful Status:  PENDING
getting session status is successful Status:  PENDING
getting session status is successful Status:  PREPARING
getting session status is successful Status:  PREPARING
getting session status is successful Status:  PREPARING
getting session status is successful Status:  PREPARING
getting session status is successful Status:  PREPARING
getting session status is successful Status:  PREPARING
getting session status is successful Status:  PREPARING
getting session status is successful Status:  PREPARING
getting session status is successful Status:  PREPARING
getting session status is successful Status:  PREPARING
getting session status is successful Status:  PREPARING
getting session status is successful Status:  PREPARING
getting session status is successful Status:  RUNNING
Remote access session started! Installing app...
{ appUpload:
   { arn: 'arn:aws:aatp:us-west-2:111122223333:upload:42ca0449-2714-4dd8-848f-ae9ef6655efb/cd200f8e-e7f7-4d18-a4ee-32ad959a0786',
     name: 'app-debug.apk',
     created: 2019-05-04T00:24:32.871Z,
     type: 'ANDROID_APP',
     status: 'SUCCEEDED',
     url: 'https://prod-us-west-2-uploads.s3-us-west-2.amazonaws.com/arn%3Aaws%3Adevicefarm%3Aus-west-2%3A111122223333%3Aproject%3A42ca0449-2714-4dd8-848f-ae9ef6655efb/uploads/arn%3Aaws%3Adevicefarm%3Aus-west-2%3A111122223333%3Aupload%3A42ca0449-2714-4dd8-848f-ae9ef6655efb/cd200f8e-e7f7-4d18-a4ee-32ad959a0786/app-debug.apk?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20190504T002655Z&X-Amz-SignedHeaders=host&X-Amz-Expires=86400&X-Amz-Credential=AKIAJSORV74ENYFBITRQ%2F20190504%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Signature=4630cef6030405b6997281c2477722d3da24eb04ed6aab8e91735d936e532807',
     metadata: '{"device_admin":false,"activity_name":"com.amazonaws.devicefarm.android.referenceapp.Activities.MainActivity","version_name":"1.0","screens":["small","normal","large","xlarge"],"error_type":null,"sdk_version":"10","package_name":"com.amazonaws.devicefarm.android.referenceapp","version_code":"1","native_code":[],"target_sdk_version":"22"}',
     category: 'PRIVATE' } }

НТН

Джеймс

...