Latest Posts

Поднятие Docker контейнеров в тестах с Go и Dockertest

Поднятие Docker контейнеров в тестах с Go и Dockertest

Для запуска интеграционных тестов в Golang часто требуются внешние зависимости в виде базы данных, брокера сообщений либо еще каких-то сторонних компонентов.В итоге для поднятия внешних сервисов мы используем Docker и пишем docker-compose.yml файл который выглядит как-то так:

version: '3'
services:
  db:
    image: postgres:10.6-alpine
    ports:
      - '5432'
    environment:
      LC_ALL: C.UTF-8
      POSTGRES_DB: test
      POSTGRES_USER: test
      POSTGRES_PASSWORD: pass

Далее до запуска go test мы делаем docker-compose up -d.

Read more

Получение обновленного kubeconfig в DigitalOcean

Получение обновленного kubeconfig в DigitalOcean

Доступ к Kubernetes в DigitalOcean лимитирован одной неделей, получается каждую неделю нужно получать новый пароль доступа к кластеру. Скачать обновленный kubeconfig можно через консоль в DigitalOcean либо можно воспользоваться командой ниже:

curl -X GET "https://api.digitalocean.com/v2/kubernetes/clusters/<cluster-id>/kubeconfig" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $DO_TOKEN" -o ~/.kube/config

Для работы требуется действующий DigitalOcean токен, который можно получить в разделе API.

Read more

Поднятие прокси-сервера Squid при помощи Docker за 3 минуты

Поднятие прокси-сервера Squid при помощи Docker за 3 минуты

Squid — это мощный кеширующий прокси-сервер для протоколов HTTP, HTTPS и FTP. Он помогает ускорить доступ к веб-ресурсам, снижает нагрузку на канал и может использоваться для фильтрации трафика.

В этой статье мы развернём Squid в Docker-контейнере и настроим его работу.


Шаг 1: Создание конфигурационного файла

Создадим файл squid.conf с базовыми настройками:

Read more

Скрипт парсинга курсов Bestchange

Скрипт парсинга курсов Bestchange

Скрипт проводит выборку курсов по заданным входным параметрам и может выдавать готовую json структуру по заданным направлениям. Выборка курсов производится через публичный API и содержит в себе всю необходимую информацию по лучшим курсам и параметрам обменных пунктов:

  • Минимальная цена заявки
  • Максимальная цена заявки
  • Курс
  • Резервы
  • Отзывы (Положительные — Отрицательные)
  • Название обменного пункта

Пример работы скрипта:

Read more

Golang &#8212; использование envconfig для environment variables

Golang — использование envconfig для environment variables

Для работы с переменными окружения в Golang без использования библиотеки envconfig просто не обойтись:

//AppConfig struct to manage configuration env vars
type AppConfig struct {
	DBHost       string `envconfig:"DB_HOST" required:"true"`
	DBPort       int    `envconfig:"DB_PORT" required:"true"`
	DBUser       string `envconfig:"DB_USER" required:"true"`
	DBName       string `envconfig:"DB_NAME" required:"true"`
	DBPassword   string `envconfig:"DB_PASSWORD" required:"true"`
}

...

// and let's use it in our main func:
var cfg AppConfig
err := envconfig.Process("myApp", &cfg)
if err != nil {
	return nil, err
}

// finally, let's use our app configuration
fmt.Println(cfg.DBHost)

Библиотека также поддерживает default значения, required флаги, custom декодеры и многое многое другое.

Read more

Golang sqlmock db tests &#8212; SELECT тесты

Golang sqlmock db tests — SELECT тесты

func TestFindAll(t *testing.T) {
	dbMock, mock, err := sqlmock.New()
	if err != nil {
		t.Errorf("An error '%s' was not expected when opening a stub database connection", err)
	}
	defer dbMock.Close()

	columns := []string{"id", "date", "name", "code"}

	expectedData := Data{
		Id: 1,
		Date:   time.Time{},
		Name:   "Name",
		Code:   "Code",
	}

	dbConn := sqlx.NewDb(dbMock, "")

	mock.ExpectQuery(`SELECT id,date,name,code FROM datas ORDER BY name ASC`).
		WillReturnRows(sqlmock.NewRows(columns).AddRow(expectedData.Id, expectedData.Date, expectedData.Name, expectedData.Code))

	r := NewRepository(dbConn)
	currencies, err := r.FindAll()
	assert.NoError(t, err)

	if err := mock.ExpectationsWereMet(); err != nil {
		t.Error(err)
	}

	expectedListOfDatas := []*Currency{&expectedData}
	assert.Equal(t, expectedListOfDatas, datas)
}

 

Read more

Docker &#8212; сохранить image в tar

Docker — сохранить image в tar

Для сохранения image в tar контейнер достаточно выполнить:

docker save my_image > my_image.tar

Теперь мы можем спокойно переносить docker image и далее «загружать» image:

docker load <input_path>/my_image.tar

 

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Read more

Golang &#8212; Mock для sqlx драйвера базы данных

Golang — Mock для sqlx драйвера базы данных

Для написания юнит тестов часто требуется «мокать» часть зависимостей, одна из самых распространенных — соединение и операции с базой данных. Если нет возможности использовать внедрение зависимости и использовать интерфейсы типа ExecerContext на входе функции то в дело вступают не совсем чистые хаки в виде Monkey patching.

Read more

Полезные curl для Digital Ocean API

Полезные curl для Digital Ocean API

При автоматизации инфраструктуры под Terraform понадобилось найти id SSH ключей и типы дроплетов чтобы их было возможно использовать в конфигурации. Делюсь примерами curl запросов к Digital Ocean API (статья будет дополняться со временем).

  1. Вывод SSH id keys, привязанных к аккаунту:
    curl -X GET -H "Content-Type: application/json" -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" "https://api.digitalocean.com/v2/account/keys" | jq
  2. Вывод всех типов дроплетов:
    curl -X GET "https://api.digitalocean.com/v2/images?per_page=999" -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" | jq

    Поскольку вывод получается слишком большим можно воспользоваться сохранением ответа в файл:

    Read more

GitHub API &#8212; пара полезных curl примеров

GitHub API — пара полезных curl примеров

Список команд в организации:

curl GET --url 'https://api.github.com/orgs/<organization-name>/teams?access_token=<TOKEN>’

Работа с GitHub Status API, установка badge для Pull Request:

curl -d '{"state": "success","target_url": "https://example.com/build/status","description": "The build succeeded!","context": "continuous-integration/jenkins"}' -H "Content-Type: application/json" -X POST "https://api.github.com/repos/<organization-name>/<project-name>/statuses/<sha-of-the-commit>?access_token=<github-token>”

Данный сниппет может быть использован для установки badges на определенном pull request.

При возникновении новых интересных запросов данный пост будет пополняться.

Read more