hw12_13_14_15_calendar
Andrey Ivanov 2020-12-02 15:55:35 +03:00 committed by tiburon
parent 1131e2644f
commit e8e738ee78
12 changed files with 139 additions and 101 deletions

View File

@ -28,10 +28,10 @@ generate:
compose-build:
sudo -S docker-compose -f ./cicd/docker-compose.yml build
compose-up:
sudo -S docker-compose -f ./cicd/docker-compose.yml up -d
up:
sudo -S docker-compose -f ./cicd/docker-compose.yml up -d --build
compose-down:
down:
sudo -S docker-compose -f ./cicd/docker-compose.yml down
calendar-start:

View File

@ -3,7 +3,7 @@ RUN mkdir -p /app
WORKDIR /app
COPY . .
RUN go get -d ./cmd/calendar/.
RUN GOOS=linux GOARCH=amd64 go build -a -o calendar ./cmd/calendar/.
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -o calendar ./cmd/calendar/.
FROM alpine:latest
ENV APP_GRPC_ADDRESS=0.0.0.0
@ -14,7 +14,7 @@ ENV APP_API_ADDRESS=0.0.0.0
ENV APP_API_PORT=50053
ENV APP_LOGGER_FILE=/calendar.log
ENV APP_LOGGER_LEVEL=INFO
ENV APP_STORAGE_INMEMORY=true
ENV APP_STORAGE_INMEMORY=false
ENV APP_STORAGE_SQLHOST=psql
ENV APP_STORAGE_SQLPORT=5432
ENV APP_STORAGE_SQLDBASE=calendar
@ -25,4 +25,4 @@ COPY --from=builder /app/calendar ./sbin
EXPOSE ${APP_GRPC_PORT}
EXPOSE ${APP_HTTP_PORT}
EXPOSE ${APP_API_PORT}
CMD ["calendar"]
ENTRYPOINT ["calendar"]

View File

@ -1,5 +1,68 @@
version: '3'
services:
calendar:
build:
context: ..
dockerfile: ./cicd/calendar/Dockerfile
volumes:
- ../calendar.log:/calendar.log
ports:
- "8888:8888"
- "50051:50051"
- "50053:50053"
expose:
- 8888
- 50051
- 50053
depends_on:
- psql
- goose
scheduler:
build:
context: ..
dockerfile: ./cicd/scheduler/Dockerfile
volumes:
- ../calendar.log:/calendar.log
depends_on:
- rabbitmq
- calendar
restart: on-failure
sender:
build:
context: ..
dockerfile: ./cicd/sender/Dockerfile
volumes:
- ../calendar.log:/calendar.log
depends_on:
- rabbitmq
restart: on-failure
goose:
build:
context: ..
dockerfile: ./cicd/goose/Dockerfile
environment:
GOOSE_DRIVER: "postgres"
GOOSE_DBSTRING: "host=psql port=5432 user=calendar password=12345678 dbname=calendar sslmode=disable"
depends_on:
- psql
restart: on-failure
psql:
image: postgres:11-alpine
hostname: "psql"
container_name: psql
environment:
POSTGRES_USER: calendar
POSTGRES_PASSWORD: 12345678
POSTGRES_DB: calendar
ports:
- "5432:5432"
expose:
- 5432
rabbitmq:
image: rabbitmq:3-management-alpine
hostname: "rabbitmq"
@ -12,28 +75,6 @@ services:
ports:
- "5672:5672"
- "15672:15672"
#calendar:
# build:
# context: ..
# dockerfile: ./cicd/calendar/Dockerfile
# ports:
# - "8888:8888"
# volumes:
# - ../calendar.log:/calendar.log
#scheduler:
# build:
# context: ..
# dockerfile: ./cicd/scheduler/Dockerfile
# volumes:
# - ../calendar.log:/calendar.log
# depends_on:
# - rabbitmq
# - calendar
#sender:
# build:
# context: ..
# dockerfile: ./cicd/sender/Dockerfile
# volumes:
# - ../calendar.log:/calendar.log
# depends_on:
# - rabbitmq
expose:
- 15672
- 5672

View File

@ -0,0 +1,5 @@
FROM golang:1.14
WORKDIR /
RUN go get -u github.com/pressly/goose/cmd/goose
COPY . .
ENTRYPOINT ["/go/bin/goose", "-dir", "migrations", "up"]

View File

@ -3,7 +3,7 @@ RUN mkdir -p /app
WORKDIR /app
COPY . .
RUN go get -d ./cmd/scheduler/.
RUN GOOS=linux GOARCH=amd64 go build -a -o scheduler ./cmd/scheduler/.
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -o scheduler ./cmd/scheduler/.
FROM alpine:latest
ENV APP_RABBITMQ_ADDRESS=rabbitmq
@ -19,4 +19,4 @@ ENV APP_LOGGER_FILE=/calendar.log
ENV APP_LOGGER_LEVEL=INFO
WORKDIR /
COPY --from=builder /app/scheduler ./sbin
CMD ["scheduler"]
ENTRYPOINT ["scheduler"]

View File

@ -3,7 +3,7 @@ RUN mkdir -p /app
WORKDIR /app
COPY . .
RUN go get -d ./cmd/sender/.
RUN GOOS=linux GOARCH=amd64 go build -a -o sender ./cmd/sender/.
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -o sender ./cmd/sender/.
FROM alpine:latest
ENV APP_RABBITMQ_ADDRESS=rabbitmq
@ -17,4 +17,4 @@ ENV APP_LOGGER_FILE=/calendar.log
ENV APP_LOGGER_LEVEL=INFO
WORKDIR /
COPY --from=builder /app/sender ./sbin
CMD ["sender"]
ENTRYPOINT ["sender"]

View File

@ -9,10 +9,10 @@ import (
"github.com/stretchr/testify/require"
"github.com/tiburon-777/HW_OTUS/hw12_13_14_15_calendar/pkg/api/public"
"log"
"os"
"sync"
"testing"
"time"
"os"
)
var _ = func() bool {
@ -39,12 +39,13 @@ var testEvent02 = public.CreateReq{
NotifyTime: dur2pbduration(5 * time.Minute),
UserID: 2222,
}
func TestMain(m *testing.M) {
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
go func(ctx context.Context) {
main()
}(ctx)
time.Sleep(1*time.Second)
time.Sleep(1 * time.Second)
c := m.Run()
@ -116,29 +117,29 @@ func TestPublicGRPCEndpoint(t *testing.T) {
require.NoError(t, err)
require.GreaterOrEqual(t, len(list.Events), 2)
var e1, e2 bool
for _,v := range list.Events {
if v.ID==resp1.ID {
e1=true
for _, v := range list.Events {
if v.ID == resp1.ID {
e1 = true
}
if v.ID==resp2.ID {
e2=true
if v.ID == resp2.ID {
e2 = true
}
}
require.True(t, e1)
require.True(t, e2)
})
t.Run("test public GRPC.Create and GRPC.GetByDate", func(t *testing.T){
t.Run("test public GRPC.Create and GRPC.GetByDate", func(t *testing.T) {
defer wg.Done()
resp1, err := publicAPI.Create(ctx, &testEvent01)
require.NoError(t, err)
list, err := publicAPI.GetByDate(ctx,&public.GetByDateReq{Date: testEvent01.Date, Range: public.QueryRange_DAY})
list, err := publicAPI.GetByDate(ctx, &public.GetByDateReq{Date: testEvent01.Date, Range: public.QueryRange_DAY})
require.NoError(t, err)
require.GreaterOrEqual(t, len(list.Events), 2)
var e1 bool
for _,v := range list.Events {
if v.ID==resp1.ID {
e1=true
for _, v := range list.Events {
if v.ID == resp1.ID {
e1 = true
}
}
require.True(t, e1)
@ -211,29 +212,29 @@ func TestPublicAPIEndpoint(t *testing.T) {
require.NoError(t, err)
require.GreaterOrEqual(t, len(list.Events), 2)
var e1, e2 bool
for _,v := range list.Events {
if v.ID==resp1.ID {
e1=true
for _, v := range list.Events {
if v.ID == resp1.ID {
e1 = true
}
if v.ID==resp2.ID {
e2=true
if v.ID == resp2.ID {
e2 = true
}
}
require.True(t, e1)
require.True(t, e2)
})
t.Run("test public GRPC.Create and GRPC.GetByDate", func(t *testing.T){
t.Run("test public GRPC.Create and GRPC.GetByDate", func(t *testing.T) {
defer wg.Done()
resp1, err := publicAPI.Create(ctx, &testEvent01)
require.NoError(t, err)
list, err := publicAPI.GetByDate(ctx,&public.GetByDateReq{Date: testEvent01.Date, Range: public.QueryRange_DAY})
list, err := publicAPI.GetByDate(ctx, &public.GetByDateReq{Date: testEvent01.Date, Range: public.QueryRange_DAY})
require.NoError(t, err)
require.GreaterOrEqual(t, len(list.Events), 2)
var e1 bool
for _,v := range list.Events {
if v.ID==resp1.ID {
e1=true
for _, v := range list.Events {
if v.ID == resp1.ID {
e1 = true
}
}
require.True(t, e1)
@ -242,7 +243,6 @@ func TestPublicAPIEndpoint(t *testing.T) {
wg.Wait()
}
func time2pbtimestamp(t time.Time) *timestamp.Timestamp {
r, err := ptypes.TimestampProto(t)
if err != nil {

View File

@ -2,14 +2,13 @@ package main
import (
"flag"
_ "github.com/go-sql-driver/mysql"
"github.com/tiburon-777/HW_OTUS/hw12_13_14_15_calendar/internal/sheduler"
"github.com/tiburon-777/HW_OTUS/hw12_13_14_15_calendar/pkg/config"
"log"
"os"
"os/signal"
"syscall"
_ "github.com/go-sql-driver/mysql"
"github.com/tiburon-777/HW_OTUS/hw12_13_14_15_calendar/pkg/config"
)
var configFile string

View File

@ -2,14 +2,13 @@ package main
import (
"flag"
_ "github.com/go-sql-driver/mysql"
"github.com/tiburon-777/HW_OTUS/hw12_13_14_15_calendar/internal/sender"
"github.com/tiburon-777/HW_OTUS/hw12_13_14_15_calendar/pkg/config"
"log"
"os"
"os/signal"
"syscall"
_ "github.com/go-sql-driver/mysql"
"github.com/tiburon-777/HW_OTUS/hw12_13_14_15_calendar/pkg/config"
)
var configFile string

View File

@ -1,16 +1,15 @@
-- +goose Up
-- +goose StatementBegin
CREATE TABLE events (
id int(16) NOT NULL AUTO_INCREMENT,
id serial NOT NULL,
title varchar(255) NOT NULL,
date datetime NOT NULL,
latency int(16) NOT NULL,
note text,
userID int(16),
notifyTime int(16),
date timestamptz NOT NULL,
latency int8 NOT NULL,
note text NULL,
userID int8 NOT NULL,
notifyTime timestamptz NULL,
notified bool
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;;
);
-- +goose StatementEnd
-- +goose Down

View File

@ -3,8 +3,9 @@ package public
import (
"context"
"fmt"
"google.golang.org/grpc"
"net"
"google.golang.org/grpc"
)
func NewClient(ctx context.Context, addr, port string) (GrpcClient, error) {

View File

@ -35,11 +35,11 @@ var testEvent02 = public.CreateReq{
func main() {
if err := TestPublicAPIEndpoint(); err != nil {
log.Fatalf("TestPublicAPIEndpoint FAIL: %w",err)
log.Fatalf("TestPublicAPIEndpoint FAIL: %w", err)
}
if err := TestPublicGRPCEndpoint(); err != nil {
log.Fatalf("TestPublicGRPCEndpoint FAIL: %w",err)
log.Fatalf("TestPublicGRPCEndpoint FAIL: %w", err)
}
}
@ -69,7 +69,6 @@ func TestPublicGRPCEndpoint() error {
require.Equal(t, testEvent01.Date.Seconds, resp2.Events[0].Date.Seconds)
require.Equal(t, testEvent01.Note, resp2.Events[0].Note)
})
t.Run("test public GRPC.Create, GRPC.Update and GRPC.GetById", func(t *testing.T) {
defer wg.Done()
resp1, err := publicAPI.Create(ctx, &testEvent01)
@ -85,7 +84,6 @@ func TestPublicGRPCEndpoint() error {
require.Equal(t, testEvent02.Date.Seconds, resp2.Events[0].Date.Seconds)
require.Equal(t, testEvent02.Note, resp2.Events[0].Note)
})
t.Run("test public GRPC.Create, GRPC.Delete and GRPC.GetById", func(t *testing.T) {
defer wg.Done()
resp1, err := publicAPI.Create(ctx, &testEvent01)
@ -97,7 +95,6 @@ func TestPublicGRPCEndpoint() error {
require.Error(t, err)
require.Nil(t, resp2)
})
t.Run("test public GRPC.Create and GRPC.List", func(t *testing.T) {
defer wg.Done()
resp1, err := publicAPI.Create(ctx, &testEvent01)
@ -110,34 +107,32 @@ func TestPublicGRPCEndpoint() error {
require.NoError(t, err)
require.GreaterOrEqual(t, len(list.Events), 2)
var e1, e2 bool
for _,v := range list.Events {
if v.ID==resp1.ID {
e1=true
for _, v := range list.Events {
if v.ID == resp1.ID {
e1 = true
}
if v.ID==resp2.ID {
e2=true
if v.ID == resp2.ID {
e2 = true
}
}
require.True(t, e1)
require.True(t, e2)
})
t.Run("test public GRPC.Create and GRPC.GetByDate", func(t *testing.T){
t.Run("test public GRPC.Create and GRPC.GetByDate", func(t *testing.T) {
defer wg.Done()
resp1, err := publicAPI.Create(ctx, &testEvent01)
require.NoError(t, err)
list, err := publicAPI.GetByDate(ctx,&public.GetByDateReq{Date: testEvent01.Date, Range: public.QueryRange_DAY})
list, err := publicAPI.GetByDate(ctx, &public.GetByDateReq{Date: testEvent01.Date, Range: public.QueryRange_DAY})
require.NoError(t, err)
require.GreaterOrEqual(t, len(list.Events), 2)
var e1 bool
for _,v := range list.Events {
if v.ID==resp1.ID {
e1=true
for _, v := range list.Events {
if v.ID == resp1.ID {
e1 = true
}
}
require.True(t, e1)
})
wg.Wait()
}
@ -205,29 +200,29 @@ func TestPublicAPIEndpoint() error {
require.NoError(t, err)
require.GreaterOrEqual(t, len(list.Events), 2)
var e1, e2 bool
for _,v := range list.Events {
if v.ID==resp1.ID {
e1=true
for _, v := range list.Events {
if v.ID == resp1.ID {
e1 = true
}
if v.ID==resp2.ID {
e2=true
if v.ID == resp2.ID {
e2 = true
}
}
require.True(t, e1)
require.True(t, e2)
})
t.Run("test public GRPC.Create and GRPC.GetByDate", func(t *testing.T){
t.Run("test public GRPC.Create and GRPC.GetByDate", func(t *testing.T) {
defer wg.Done()
resp1, err := publicAPI.Create(ctx, &testEvent01)
require.NoError(t, err)
list, err := publicAPI.GetByDate(ctx,&public.GetByDateReq{Date: testEvent01.Date, Range: public.QueryRange_DAY})
list, err := publicAPI.GetByDate(ctx, &public.GetByDateReq{Date: testEvent01.Date, Range: public.QueryRange_DAY})
require.NoError(t, err)
require.GreaterOrEqual(t, len(list.Events), 2)
var e1 bool
for _,v := range list.Events {
if v.ID==resp1.ID {
e1=true
for _, v := range list.Events {
if v.ID == resp1.ID {
e1 = true
}
}
require.True(t, e1)
@ -236,7 +231,6 @@ func TestPublicAPIEndpoint() error {
wg.Wait()
}
func time2pbtimestamp(t time.Time) *timestamp.Timestamp {
r, err := ptypes.TimestampProto(t)
if err != nil {