From 545540cea95c971f88043378979a29fb681d0082 Mon Sep 17 00:00:00 2001 From: Fedor Korotkiy Date: Wed, 22 Feb 2023 17:02:34 +0400 Subject: [PATCH] WIP --- .releaser-ci.yml | 4 +- blowfish/blowfish.go | 1 + build.docker | 5 +- dockertest/README.md | 106 ------------------------------ dockertest/docker-compose.yaml | 30 --------- dockertest/docker_test.go | 109 ------------------------------- dockertest/postgres/Dockerfile | 3 - dockertest/postgres/init.sql | 7 -- lectures/07-sql/resources/ctx.go | 2 +- 9 files changed, 5 insertions(+), 262 deletions(-) delete mode 100644 dockertest/README.md delete mode 100644 dockertest/docker-compose.yaml delete mode 100644 dockertest/docker_test.go delete mode 100644 dockertest/postgres/Dockerfile delete mode 100644 dockertest/postgres/init.sql diff --git a/.releaser-ci.yml b/.releaser-ci.yml index 7fd9a21..78d1c50 100644 --- a/.releaser-ci.yml +++ b/.releaser-ci.yml @@ -11,8 +11,8 @@ check: - golangci-lint run --build-tags private,solution ./... #- go test -v -tags private,solution ./... #- go test -v -race -tags private,solution ./... - - sudo -u nobody HOME=/tmp PATH=$PATH /usr/local/go/bin/go test $(go list -tags private,solution ./... | grep -v /dockertest | grep -v /foolsday3) -tags private,solution -v ./... - - sudo -u nobody HOME=/tmp PATH=$PATH /usr/local/go/bin/go test $(go list -tags private,solution ./... | grep -v /dockertest) -tags private,solution -v -race ./... + - sudo -u nobody HOME=/tmp PATH=$PATH /usr/local/go/bin/go test -tags private,solution ./... + - sudo -u nobody HOME=/tmp PATH=$PATH /usr/local/go/bin/go test -tags private,solution -race ./... rebuild-base-image: tags: diff --git a/blowfish/blowfish.go b/blowfish/blowfish.go index 59a5558..787038a 100644 --- a/blowfish/blowfish.go +++ b/blowfish/blowfish.go @@ -3,6 +3,7 @@ package blowfish // #cgo pkg-config: libcrypto +// #cgo CFLAGS: -Wno-deprecated-declarations // #include import "C" diff --git a/build.docker b/build.docker index 69cd6a4..92d82e1 100644 --- a/build.docker +++ b/build.docker @@ -1,10 +1,7 @@ -FROM golang:1.18 +FROM golang:1.20 RUN apt-get update && apt-get install -y \ rsync libssl-dev postgresql sudo redis-server \ && rm -rf /var/lib/apt/lists/* RUN curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.46.0 -RUN curl -L "https://github.com/docker/compose/releases/download/1.28.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose -RUN chmod +x /usr/local/bin/docker-compose -RUN curl -fsSL https://get.docker.com | sh diff --git a/dockertest/README.md b/dockertest/README.md deleted file mode 100644 index 2dc6fe0..0000000 --- a/dockertest/README.md +++ /dev/null @@ -1,106 +0,0 @@ -## dockertest - -Это не настоящая задача, а заготовка на будущее. - -### Что нужно сделать? - -Установить docker и добиться успешного **локального** запуска тестов -``` -go test -v ./dockertest/... -count=1 -``` - -### С чего начать? - -
- Дополнительные шаги для Windows 10 - -
- -1. Установить WSL2 по [инструкции от Microsoft](https://docs.microsoft.com/en-us/windows/wsl/install-win10).
-**Важно:** нужна именно вторая версия **WSL2**, проверьте, что она совместима с вашей системой.
-Если шаг 5 не работает, включите опцию `Windows Hypervisor Platform` (Settings -> Apps -> Apps & features -> Optional features -> More Windows Features -> включить чекбокс Windows Hypervisor Platform). - -2. Установите Docker Desktop по [инструкции](https://docs.docker.com/docker-for-windows/wsl/#download). Вероятно, выполнять шаги по активации поддержки WSL не потребуется, все подключится автоматически. - -3. Запустите Docker Desktop (никакие контейнеры запускать не надо, только если хотите убедиться в том, что все работает).
-Запустите установленную в п.1 Linux OS через WSL2.
-Далее используйте этот Linux для выполнения дальнейших шагов этого README. - -_Замечание_: запущенный, но уже не использующийся Docker Desktop с бекэндом WSL занимает впустую много оперативной памяти, см [issue](https://github.com/microsoft/WSL/issues/4166) - можно ограничить максимальный доступный ему объем (см. [workaround](https://github.com/microsoft/WSL/issues/4166#issuecomment-526725261)), либо отключить автозапуск Docker Desktop и останавливать сервис, когда вы его не используете. - -
- -#### Установить docker - -https://docs.docker.com/engine/install/ - -После стандартной процедуры установки на Linux будет создана группа `docker`. -Чтобы использовать docker cli без sudo, нужно добавить себя в эту группу: -``` -sudo groupadd docker -sudo usermod -aG docker $USER -``` -После этого разлогиньтесь из os и залогиньтесь заново (или перезапустите систему). - -Для проверки можно запустить -``` -docker run hello-world -``` - -#### Установить docker-compose - -https://docs.docker.com/compose/install/ - -#### Запустить контейнеры не через тесты - -В директории `dockertest` выполнить -``` -docker-compose up -``` - -### Что делать, если сразу не заработало? - -Поискать решение проблемы в интернете. - -Если решение найдено и проблема выглядит общей, сделать merge request с улучшением README. - -Если интернет не помог, спросить в чате. - -### docker-compose cheat sheet - -Запустить все контейнеры в daemon режиме пересобрав образы: -``` -docker-compose up -d --build -``` - -Остановить все контейнеры: -``` -docker-compose down -``` - -### Docker cheat sheet - -Получить список образов: -``` -docker images -``` - -Список всех контейнеров: -``` -docker ps -a -``` - -Остановить контейнер: -``` -docker stop -``` - -Удалить контейнер: -``` -docker rm -``` - -Удалить образ: -``` -docker rmi -``` diff --git a/dockertest/docker-compose.yaml b/dockertest/docker-compose.yaml deleted file mode 100644 index b84dede..0000000 --- a/dockertest/docker-compose.yaml +++ /dev/null @@ -1,30 +0,0 @@ -version: '3' -services: - pg: - build: ./postgres/ - environment: - POSTGRES_DB: test - POSTGRES_USER: gopher - POSTGRES_PASSWORD: pass - ports: - - 5432:5432 - - redis: - image: "redis:alpine" - hostname: redis - ports: - - "6379:6379" - - prometheus: - image: prom/prometheus:latest - ports: - - 9090:9090 - - grafana: - image: grafana/grafana:latest - environment: - - GF_SECURITY_ADMIN_USER=gopher - - GF_SECURITY_ADMIN_PASSWORD=pass - - GF_USERS_ALLOW_SIGN_UP=false - ports: - - 3000:3000 diff --git a/dockertest/docker_test.go b/dockertest/docker_test.go deleted file mode 100644 index b211942..0000000 --- a/dockertest/docker_test.go +++ /dev/null @@ -1,109 +0,0 @@ -package dockertest - -import ( - "database/sql" - "fmt" - "log" - "net" - "os" - "strings" - "testing" - "time" - - "github.com/cenkalti/backoff" - "github.com/go-redis/redis" - "github.com/google/uuid" - _ "github.com/lib/pq" - "github.com/stretchr/testify/require" - tc "github.com/testcontainers/testcontainers-go" -) - -var ( - postgresDB *sql.DB - redisDB *redis.Client -) - -func TestMain(m *testing.M) { - path := "./docker-compose.yaml" - compose, err := StartDockerCompose(path) - if err != nil { - log.Fatal(err) - } - - host := os.Getenv("APP_HOST") - if err = Retry(func() error { - postgresDB, err = sql.Open("postgres", fmt.Sprintf("postgres://%s:%s@%s:%s/%s?sslmode=disable", "gopher", "pass", host, "5432", "test")) - if err != nil { - return err - } - return postgresDB.Ping() - }); err != nil { - log.Fatalf("could not connect to postgres: %s", err) - } - - if err = Retry(func() error { - redisDB = redis.NewClient(&redis.Options{ - Addr: net.JoinHostPort(host, "6379"), - }) - - return redisDB.Ping().Err() - }); err != nil { - log.Fatalf("could not connect to redis: %s", err) - } - - code := m.Run() - - if err := compose.Down().Error; err != nil { - log.Fatalf("could not stop containers from %v: %v", path, err) - } - - os.Exit(code) -} - -func StartDockerCompose(paths ...string) (*tc.LocalDockerCompose, error) { - id := strings.ToLower(uuid.New().String()) - - compose := tc.NewLocalDockerCompose(paths, id) - execError := compose. - WithCommand([]string{"up", "-d"}). - Invoke() - - err := execError.Error - if err != nil { - return nil, fmt.Errorf("could not start containers from %v: %v", paths, err) - } - - return compose, nil -} - -func Retry(f func() error) error { - b := backoff.NewExponentialBackOff() - b.MaxInterval = time.Second * 5 - b.MaxElapsedTime = time.Minute - - return backoff.Retry(f, b) -} - -func TestPostgres(t *testing.T) { - rows, err := postgresDB.Query(`SELECT table_name -FROM information_schema.tables -WHERE table_schema = 'public' -`) - require.NoError(t, err) - - var table string - for rows.Next() { - err := rows.Scan(&table) - require.NoError(t, err) - t.Logf("table: %s", table) - } - - require.NoError(t, rows.Err()) -} - -func TestRedis(t *testing.T) { - cmd := redisDB.ClientList() - require.NoError(t, cmd.Err()) - - t.Logf("value: %v", cmd.Val()) -} diff --git a/dockertest/postgres/Dockerfile b/dockertest/postgres/Dockerfile deleted file mode 100644 index 8566692..0000000 --- a/dockertest/postgres/Dockerfile +++ /dev/null @@ -1,3 +0,0 @@ -FROM postgres:latest - -COPY init.sql /docker-entrypoint-initdb.d/10-init.sql diff --git a/dockertest/postgres/init.sql b/dockertest/postgres/init.sql deleted file mode 100644 index 459cdb3..0000000 --- a/dockertest/postgres/init.sql +++ /dev/null @@ -1,7 +0,0 @@ -create table Role( - RoleID SERIAL PRIMARY KEY, - RoleName varchar(50) -); - -insert into Role(RoleName) -values ('Admin'),('User'); diff --git a/lectures/07-sql/resources/ctx.go b/lectures/07-sql/resources/ctx.go index 902adec..90e091a 100644 --- a/lectures/07-sql/resources/ctx.go +++ b/lectures/07-sql/resources/ctx.go @@ -15,5 +15,5 @@ func NoContext(ctx context.Context, db *sql.DB) { defer c.Close() // Потенциально вечный Ping - _ = c.Ping() + _ = db.Ping() }