Как запустить сквозные тесты для Azure IoT C SDK на Raspberry Pi? - PullRequest
0 голосов
/ 19 апреля 2019

Я пытаюсь скомпилировать и протестировать azure-iot-sdk-c на Raspberry Pi.Как мне скомпилировать его на Raspberry Pi, а затем запустить тесты E2E, предоставленные в SDK?

1 Ответ

0 голосов
/ 09 мая 2019

Чтобы достичь этого, есть пара подходов, которые вы можете использовать. Вы можете скачать кросс-компилятор для Pi и сохранить исходный код только на своей машине для разработки. Затем, когда вы захотите запустить код / ​​тесты на Pi, вы будете использовать кросс-компилятор для создания выходных данных, которые могут запускаться на Pi, передавать исполняемые файлы на Pi и возвращать результаты обратно на компьютер разработчика. Этот подход, вероятно, будет довольно быстрым, и если ваш проект содержит много файлов, это может быть хорошим способом сделать это. Настроить кросс-компилятор - не самая простая вещь, но есть много зарегистрированных случаев в сети людей, которые уже сделали это.

Другой подход заключается в разработке исходного кода на вашей машине разработки, но сборке кода для Pi на самом Pi. Это устраняет необходимость в настройке кросс-компилятора и делает получение результатов тестирования обратно на вашу машину разработки очень простым.

Вы можете использовать свой текстовый редактор для разработки кода на компьютере разработчика. Затем rsync для передачи ваших исходных файлов в Raspberry Pi. Наконец, вы можете установить Ruby and Ceedling (инструмент модульного тестирования на C) на вашу машину разработки и на Pi, чтобы помочь в проведении тестов. Вот как это сделать.

  • Настройка ключей SSH

Этот шаг важен, поскольку он позволяет передавать файлы с компьютера разработчика на Pi и выполнять команды удаленно, без необходимости каждый раз вводить имя пользователя и пароль. Во-первых, убедитесь, что у вас есть ключ SSH, сгенерированный на вашем компьютере разработчика. Если вы этого не делаете или не уверены, ознакомьтесь с этой замечательной статьей GitHub, в которой объясняется, как создать одну .

.

Теперь, если вы откроете каталог ~ / .ssh (или каталог / user / directory / .ssh в Windows) на компьютере разработчика, у вас должен быть файл с именем rd_isa.pub. Это «публичная» часть вашего ключа SSH. Вам нужно передать этот файл в Raspberry Pi, чтобы он мог распознать вас как утвержденного пользователя. Сделайте это с помощью следующей команды:

scp ~ / .ssh / id_rsa.pub user@remote.host: pubkey.txt

Обязательно замените «user» именем пользователя на Raspberry Pi, а «remote.host» - IP-адресом Pi.

Как только вы это сделаете, вам нужно добавить ключ к файлу «authorized_keys» на Pi. Для этого вам потребуется SSH в Pi и вручную отредактировать / создать файл. Это можно сделать следующим образом:

scp ~/.ssh/id_rsa.pub user@remote.host:pubkey.txt

ssh user@remote.host

mkdir ~/.ssh

cat pubkey.txt >> ~/.ssh/authorized_keys

rm ~/pubkey.txt
  • Установить rs rsync ’

Следующим шагом является установка rsync, утилиты, которая позволяет синхронизировать каталоги между двумя компьютерами. Когда мы вносим изменения на локальном компьютере, rsync передает эти изменения Pi для тестирования. rsync достаточно умен, чтобы передавать только те файлы, которые были обновлены с момента последней передачи, что ускорит процесс. Чтобы rsync работал, он должен быть установлен как на компьютере разработчика, так и на Raspberry Pi. Чтобы установить его на Pi, выполните следующую команду.

sudo apt-get install rsync

Процесс установки rsync на компьютере разработчика будет сильно различаться в зависимости от того, какую ОС вы используете. На Mac он уже установлен. Некоторые дистрибутивы Linux также поставляются с ним. Windows, с другой стороны, немного отстает от игры. Найдите в Google «Установка rsync в Windows» для получения инструкций по настройке.

  • Установить Ruby

Ruby - это еще один компонент, который должен быть установлен машиной разработки и целью. Ruby - это язык сценариев, который Ceedling использует для автоматизации выполнения модульных тестов. Опять же, обратитесь к универсальному Google для получения инструкций по установке последней версии на ваш компьютер разработчика. Чтобы установить Ruby на Raspberry Pi, используйте следующую команду:

sudo apt-get install ruby
  • Установить рейк

Рейк - это рубиновый каменьHat предоставляет поддержку автоматизации сборки, аналогичную «make». После того, как вы установили Ruby, установить Rake так же просто, как набрать следующее:

sudo gem install rake
  • Настройка проекта Ceedling

Наконец, мы уже можем писать код локально и выполнять тесты на нашей машине для разработки, используя команду «rake test: all».

Последнее, что нам нужно сделать, - это настроить пользовательскую задачу rake, которая будет запускать тесты на Pi без необходимости вручную вводить SSH. Посмотрите в корневом каталоге вашего проекта Ceedling, и вы увидите файл с именем Rakefile.rb. Здесь мы поставим нашу собственную задачу по рейку. Добавьте следующее в конец файла:

desc "Run rake test:all on RPi with latest changes"

desc "Update the RPi with the latest changes on dev machine."
task :update_pi_source do

  #send the latest changes to the pi
  puts cmd = "rsync -r -v . #{REMOTE_RPI_USER}@#{REMOTE_RPI_IP_ADDR}:#{REMOTE_RPI_PROJ_ROOT} --exclude=#{PROJECT_BUILD_ROOT}"
  system(cmd)
end

desc "Run rake test:all in the project directory on the pi"
task :run_all_tests_pi do

  #execute tests on the pi
  puts cmd = "ssh #{REMOTE_RPI_USER}@#{REMOTE_RPI_IP_ADDR} "cd #{REMOTE_RPI_PROJ_ROOT} && rake test:all""
  system(cmd)
end

task :pi_test_all > [:update_pi_source, :run_all_tests_pi] do
end

Это фактически определяет три рейк-задачи. Первая, update_pi_src, - это задача, которая использует rsync для обновления исходного кода на Pi. Второй, run_all_tests_pi, использует SSH для выполнения необходимой команды для компиляции кода и запуска тестов на Pi. Третье задание, pi_test_all, - это просто оболочка, которая объединяет первые два.

Надеюсь, это поможет.

...