Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
125 changes: 125 additions & 0 deletions .github/workflows/create-service.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
name: Create service test

'on':
pull_request:
push:
branches:
- master
- develop
- feature/**

env:
UBSAN_OPTIONS: print_stacktrace=1
ASAN_OPTIONS: detect_odr_violation=2
CCACHE_DIR: /home/runner/.cache/ccache
CCACHE_NOHASHDIR: true
CPM_SOURCE_CACHE: /home/runner/.cache/CPM
CMAKE_FLAGS: -GNinja
-DCMAKE_CXX_COMPILER=clang++-18
-DCMAKE_C_COMPILER=clang-18
-DCMAKE_BUILD_TYPE=Release
-DUSERVER_SANITIZE="ub addr"
-DUSERVER_NO_WERROR=0
-DUSERVER_INSTALL=1
-DUSERVER_FEATURE_CORE=1
-DUSERVER_FEATURE_CHAOTIC=1
-DUSERVER_FEATURE_POSTGRESQL=1
-DUSERVER_FEATURE_MONGODB=1
-DUSERVER_FEATURE_GRPC=1
jobs:
posix:
strategy:
fail-fast: false

runs-on: ubuntu-24.04

steps:
- uses: actions/checkout@v4

- name: Restore cached directories
id: restore-cache
uses: actions/cache/restore@v4
with:
path: |
${{env.CCACHE_DIR}}
${{env.CPM_SOURCE_CACHE}}
key: 'ubuntu-cache-dir ${{matrix.id}} ${{github.ref}} run-${{github.run_number}}'
restore-keys: |
ubuntu-cache-dir ${{matrix.id}} ${{github.ref}}
ubuntu-cache-dir ${{matrix.id}}

- name: Setup ramdrive for testsuites
run: |
sudo mkdir -p "/mnt/ramdisk/$USER"
sudo chmod 777 "/mnt/ramdisk/$USER"
sudo mount -t tmpfs -o size=2048M tmpfs "/mnt/ramdisk/$USER"

- name: Free disk space
run: |
df -h
# See https://stackoverflow.com/questions/75536771/github-runner-out-of-disk-space-after-building-docker-image
sudo rm -rf /usr/share/dotnet /usr/local/lib/android /usr/lib/php* /opt/ghc \
/usr/local/share/powershell /usr/share/swift /usr/local/.ghcup \
/opt/hostedtoolcache/CodeQL || true
sudo docker image prune --all --force
df -h

- name: Install common deps
run: |
sudo apt update
sudo apt purge -y libpq5 libpq-dev postgresql-*
sudo apt install --allow-downgrades -y ccache redis-server postgresql $(cat scripts/docs/en/deps/ubuntu-24.04.md | tr '\n' ' ')

- name: Setup ccache
run: |
ccache -M 2.0GB
ccache -s -v

- name: Install gdb and pytest
run: |
sudo apt install -y gdb python3-pytest pycodestyle
pip install ruff

- name: Run cmake
run: |
cmake -S . -B build_release ${{env.CMAKE_FLAGS}}

- name: Compile
run: |
pwd
cd build_release
cmake --build . -j $(nproc)

- name: Install
run: |
sudo cmake --install build_release

- name: Service (empty)
run: |
userver-create-service myservice
cd myservice
make build-release
make test-release
cd ..
rm -rf myservice

# - name: Service (mongo)
# run: |
# userver-create-service --mongo myservice-mongo
# cd myservice-mongo
# make build-release
# make test-release

# - name: Service (grpc)
# run: |
# userver-create-service --grpc myservice-grpc
# cd myservice-grpc
# make build-release
# make test-release

- name: Service (postgresql)
run: |
userver-create-service --postgres myservice-pg
cd myservice-pg
make build-release
make test-release
1 change: 1 addition & 0 deletions service_template/src/greeting.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ std::string SayHelloTo(std::string_view name, UserType type) {
}

UASSERT(false);
return {};
}

} // namespace service_template
36 changes: 24 additions & 12 deletions service_template/tests/test_postgres.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,33 +7,45 @@


async def test_basic(service_client):
response = await service_client.post('/hello-postgres', params={'name': 'Tester'})
response = await service_client.post(
"/hello-postgres",
params={"name": "Tester"},
)
assert response.status == 200
assert response.text == 'Hello, Tester!\n'
assert response.text == "Hello, Tester!\n"


async def test_db_updates(service_client):
response = await service_client.post('/hello-postgres', params={'name': 'World'})
response = await service_client.post(
"/hello-postgres",
params={"name": "World"},
)
assert response.status == 200
assert response.text == 'Hello, World!\n'
assert response.text == "Hello, World!\n"

response = await service_client.post('/hello-postgres', params={'name': 'World'})
response = await service_client.post(
"/hello-postgres",
params={"name": "World"},
)
assert response.status == 200
assert response.text == 'Hi again, World!\n'
assert response.text == "Hi again, World!\n"

response = await service_client.post('/hello-postgres', params={'name': 'World'})
response = await service_client.post(
"/hello-postgres",
params={"name": "World"},
)
assert response.status == 200
assert response.text == 'Hi again, World!\n'
assert response.text == "Hi again, World!\n"


@pytest.mark.pgsql('db_1', files=['initial_data.sql'])
@pytest.mark.pgsql("db_1", files=["initial_data.sql"])
async def test_db_initial_data(service_client):
response = await service_client.post(
'/hello-postgres',
params={'name': 'user-from-initial_data.sql'},
"/hello-postgres",
params={"name": "user-from-initial_data.sql"},
)
assert response.status == 200
assert response.text == 'Hi again, user-from-initial_data.sql!\n'
assert response.text == "Hi again, user-from-initial_data.sql!\n"


# postgresql template on
Loading