CLI interactive integration tests с expect и Go — часть 2
CLI interactive integration tests с expect и Go — часть 2
В прошлой части мы сделали exp файл, который бы запускал наше интерактивное консольное приложение и взаимодействовал с ним.
В этой части мы напишем Go test, который будет при помощи cmd.Exec запускать exp файл, ждать ответа и делать какие-либо assertions.
Пример простого теста, который бы запускал наш expect файл и делал проверки ниже:
CLI interactive integration tests с expect и Go — часть 1
CLI interactive integration tests с expect и Go — часть 1
Тестирование интерактивных консольных приложение получилось довольно интересной задачей.
Как пример напишем простейшие консольное приложение при помощи библиотеки survey:
package main
import (
"fmt"
"github.com/AlecAivazis/survey/v2"
)
// the questions to ask
var qs = []*survey.Question{
{
Name: "name",
Prompt: &survey.Input{Message: "What is your name?"},
Validate: survey.Required,
Transform: survey.Title,
},
{
Name: "color",
Prompt: &survey.Select{
Message: "Choose a color:",
Options: []string{"red", "blue", "green"},
Default: "red",
},
},
{
Name: "age",
Prompt: &survey.Input{Message: "How old are you?"},
},
}
func main() {
// the answers will be written to this struct
answers := struct {
Name string // survey will match the question and field names
FavoriteColor string `survey:"color"` // or you can tag fields to match a specific name
Age int // if the types don't match, survey will convert it
}{}
// perform the questions
err := survey.Ask(qs, &answers)
if err != nil {
fmt.Println(err.Error())
return
}
fmt.Printf("%s chose %s.", answers.Name, answers.FavoriteColor)
}
Приложение взаимодействует с пользователе спрашивая различне вопросы и ожидает от пользовательского ввода.
Sassoft API: Coincallback API
Sassoft API: Coincallback API
Описание API
Данный API сервис предназначен для получения уведомлений прихода средств на различные криптоадреса:
- Bitcoin
- Litecoin
- Ethereum
- Ripple
- Dogecoin
- Zcash
Идея простая: вы генерируете новый адрес для приёма криптовалюты и посылаете запрос на Coincallback API для отслеживания приёма средств. Как только средства поступают на адрес, сервис делает POST запрос на ваш адрес, указанный в адресе.
Nginx — настройка load balancer
Nginx — настройка load balancer
Простейшая настройка nginx в качестве load balancer может выглядеть следующим образом. Открываем nginx.conf, добавляем секцию серверов upstream и даём ей имя (например loadbalancer). Серверы могут слушать на разных портах. Кроме того, можно одновременно использовать серверы, слушающие на TCP- и UNIX-сокетах.
В нашем случае:
...
upstream loadbalancer {
server 172.17.0.1:5000;
server 172.17.0.1:5001;
}
...
Далее в секции server указываем nginx что нам нужно проксировать запросы с определенных роутов на наш loadbalancer:
Curl — набор на все случаи жизни
Curl — набор на все случаи жизни
В данной статье собраны некоторые полезные сниппеты для работы с curl. Curl — это кросс-платформенная служебная программа командной строки, позволяющая взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Для справки: curl поддерживает не только протокол HTTP, но и десяток других — DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, MQTT, POP3, POP3S, RTMP, RTMPS, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET и TFTP. Вообщем большой комбайн с различными интересными фичами. Я покажу лишь примеры, которые использовал сам за последнее время.
Golang: Получение stock price с Yahoo Finance
Golang: Получение stock price с Yahoo Finance
При помощи https://github.com/antchfx/htmlquery мы можем легко получать и парсить данные с веб страницы Yahoo Finance. Нас интересует именно stock price. Для этого в начале находим на странице нужный нам блок:
<div class="D(ib) Mend(20px)" data-reactid="31"> <span class="Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(ib)" data-reactid="32">63.50</span> <span class="Trsdu(0.3s) Fw(500) Pstart(10px) Fz(24px) C($positiveColor)" data-reactid="33">+2.15 (+3.50%)</span> <div id="quote-market-notice" class="C($tertiaryColor) D(b) Fz(12px) Fw(n) Mstart(0)--mobpsm Mt(6px)--mobpsm" data-reactid="34"> <span data-reactid="35">As of 1:25PM CET. Market open.</span> </div> </div>
Окей, нужный блок найден. Из этого блока нас больше всего интересует ticker price — 63.50:
Sassoft API: Notifications API
Sassoft API: Notifications API
Описание API
Данный API сервис предназначен для отправки уведомлений через различные каналы:
- Telegram
- Email через Sendgrid API
- SMTP Email
Спецификация
- POST /notify
- message * — сообщение для отправки (html форматирование поддерживается)
- message_plain — сообщение для отправки без html форматирования
- from — имя от, необходим если type=email
- from_address — адрес от, необходим если type=email
- title — заголовок, необходим если type=email
- receiver * — получатель сообщения
- type * — поддерживаемые типы: Email, Telegram, SMTP
- token * — токен пользователя
Пример запроса:
Sassoft API: Rates API для криптовалют
Sassoft API: Rates API для криптовалют
Описание API
Данный API сервис предназначен для выдачи курсов криптовалют и фиатных валют в режиме реального времени без задержек.
При помощи одного GET запроса можно получить текущие курсы криптовалют в USD, EUR, RUB. Для примера:
{
"BTC_USD":22999.408322398973,
"BTC_EUR":18745.989744887796,
"BTC_RUB":1677209.0364978933
...
}
Rates API будет полезен для сервисов, работающих на обменах криптовалют и мониторингов курсов.
Установка и настройка supervisord в raspbian
Установка и настройка supervisord в raspbian
Supervisord — система контроля процессов для Linux. По-простому, это штука которая следит чтобы ваш процесс был всегда запущен с установленной конфигурацией. Система следит что процесс работает и перезапускает если процесс падает.
Установка supervisor:
sudo apt-get install supervisor service supervisor start
Добавление конфигурации в supervisord.conf (либо создайте отдельно /etc/supervisor/conf.d/server.conf):
Локальная отладка GitHub Actions с act
Локальная отладка GitHub Actions с act
Не так давно потребовалось понять причину почему один из введенных actions для GitHub Actions перестал работать. Для того, чтобы проверить работу action их нужно для начала запустить локально. Это можно сделать при помощи утилиты act. Важно выбрать правильный runner для работы.
Пример использования act:
brew install nektos/tap/act act -P ubuntu-latest=nektos/act-environments-ubuntu:18.04 -j test
Где -j это название action для локального запуска.