switch runners and use redis cache during testing
This commit is contained in:
		
							
								
								
									
										46
									
								
								.github/workflows/ci-tests.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										46
									
								
								.github/workflows/ci-tests.yml
									
									
									
									
										vendored
									
									
								
							@@ -10,23 +10,36 @@ on:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
jobs:
 | 
					jobs:
 | 
				
			||||||
  test:
 | 
					  test:
 | 
				
			||||||
    runs-on: self-hosted
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
 | 
					    name: Tests
 | 
				
			||||||
 | 
					    strategy:
 | 
				
			||||||
 | 
					      matrix:
 | 
				
			||||||
 | 
					        python-version: ['3.10.2', '3.10.4']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    steps:
 | 
					    steps:
 | 
				
			||||||
      - uses: actions/checkout@v2
 | 
					      - uses: actions/checkout@v3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - name: Setup virtual env and install requirements
 | 
					      - uses: harmon758/postgresql-action@v1
 | 
				
			||||||
 | 
					        with:
 | 
				
			||||||
 | 
					          postgresql version: '14'
 | 
				
			||||||
 | 
					          postgresql db: 'pipeline'
 | 
				
			||||||
 | 
					          postgresql user: 'pipeline'
 | 
				
			||||||
 | 
					          postgresql password: 'pipeline123456'
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					      - name: Setup Python ${{ matrix.python-version }}
 | 
				
			||||||
 | 
					        uses: actions/setup-python@v3
 | 
				
			||||||
 | 
					        with:
 | 
				
			||||||
 | 
					          python-version: ${{ matrix.python-version }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      - name: Install redis
 | 
				
			||||||
 | 
					        run: |
 | 
				
			||||||
 | 
					          sudo apt update
 | 
				
			||||||
 | 
					          sudo apt install -y redis
 | 
				
			||||||
 | 
					          redis-server --version
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      - name: Install requirements
 | 
				
			||||||
 | 
					        working-directory: api/tacticalrmm
 | 
				
			||||||
        run: |
 | 
					        run: |
 | 
				
			||||||
          sudo -u postgres psql -c 'DROP DATABASE IF EXISTS pipeline'
 | 
					 | 
				
			||||||
          sudo -u postgres psql -c 'DROP DATABASE IF EXISTS test_pipeline'
 | 
					 | 
				
			||||||
          sudo -u postgres psql -c 'CREATE DATABASE pipeline'
 | 
					 | 
				
			||||||
          sudo -u postgres psql -c "SET client_encoding = 'UTF8'" pipeline
 | 
					 | 
				
			||||||
          pwd
 | 
					 | 
				
			||||||
          rm -rf /actions-runner/_work/trmm-actions/trmm-actions/api/env
 | 
					 | 
				
			||||||
          cd api
 | 
					 | 
				
			||||||
          python3.10 -m venv env
 | 
					 | 
				
			||||||
          source env/bin/activate
 | 
					 | 
				
			||||||
          cd tacticalrmm
 | 
					 | 
				
			||||||
          python --version
 | 
					          python --version
 | 
				
			||||||
          SETTINGS_FILE="tacticalrmm/settings.py"
 | 
					          SETTINGS_FILE="tacticalrmm/settings.py"
 | 
				
			||||||
          SETUPTOOLS_VER=$(grep "^SETUPTOOLS_VER" "$SETTINGS_FILE" | awk -F'[= "]' '{print $5}')
 | 
					          SETUPTOOLS_VER=$(grep "^SETUPTOOLS_VER" "$SETTINGS_FILE" | awk -F'[= "]' '{print $5}')
 | 
				
			||||||
@@ -38,19 +51,16 @@ jobs:
 | 
				
			|||||||
      - name: Run django tests
 | 
					      - name: Run django tests
 | 
				
			||||||
        env:
 | 
					        env:
 | 
				
			||||||
          GHACTIONS: "yes"
 | 
					          GHACTIONS: "yes"
 | 
				
			||||||
 | 
					        working-directory: api/tacticalrmm
 | 
				
			||||||
        run: |
 | 
					        run: |
 | 
				
			||||||
          cd api/tacticalrmm
 | 
					 | 
				
			||||||
          source ../env/bin/activate
 | 
					 | 
				
			||||||
          rm -f .coverage coverage.lcov
 | 
					 | 
				
			||||||
          pytest
 | 
					          pytest
 | 
				
			||||||
          if [ $? -ne 0 ]; then
 | 
					          if [ $? -ne 0 ]; then
 | 
				
			||||||
              exit 1
 | 
					              exit 1
 | 
				
			||||||
          fi
 | 
					          fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - name: Codestyle black
 | 
					      - name: Codestyle black
 | 
				
			||||||
 | 
					        working-directory: api/tacticalrmm
 | 
				
			||||||
        run: |
 | 
					        run: |
 | 
				
			||||||
          cd api
 | 
					 | 
				
			||||||
          source env/bin/activate
 | 
					 | 
				
			||||||
          black --exclude migrations/ --check tacticalrmm
 | 
					          black --exclude migrations/ --check tacticalrmm
 | 
				
			||||||
          if [ $? -ne 0 ]; then
 | 
					          if [ $? -ne 0 ]; then
 | 
				
			||||||
              exit 1
 | 
					              exit 1
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,5 @@
 | 
				
			|||||||
from typing import Optional
 | 
					from typing import Optional
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from django.core.cache.backends.dummy import DummyCache
 | 
					 | 
				
			||||||
from django.core.cache.backends.redis import RedisCache
 | 
					from django.core.cache.backends.redis import RedisCache
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -14,8 +13,3 @@ class TacticalRedisCache(RedisCache):
 | 
				
			|||||||
    # just for debugging
 | 
					    # just for debugging
 | 
				
			||||||
    def show_everything(self, version: Optional[int] = None) -> list[bytes]:
 | 
					    def show_everything(self, version: Optional[int] = None) -> list[bytes]:
 | 
				
			||||||
        return self._cache.get_client().keys(f":{version if version else 1}:*")
 | 
					        return self._cache.get_client().keys(f":{version if version else 1}:*")
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class TacticalDummyCache(DummyCache):
 | 
					 | 
				
			||||||
    def delete_many_pattern(self, pattern: str, version: Optional[int] = None) -> None:
 | 
					 | 
				
			||||||
        return None
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -155,13 +155,6 @@ CACHES = {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if "GHACTIONS" in os.environ:
 | 
					 | 
				
			||||||
    CACHES = {
 | 
					 | 
				
			||||||
        "default": {
 | 
					 | 
				
			||||||
            "BACKEND": "tacticalrmm.cache.TacticalDummyCache",
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
MIDDLEWARE = [
 | 
					MIDDLEWARE = [
 | 
				
			||||||
    "django.middleware.security.SecurityMiddleware",
 | 
					    "django.middleware.security.SecurityMiddleware",
 | 
				
			||||||
    "django.contrib.sessions.middleware.SessionMiddleware",
 | 
					    "django.contrib.sessions.middleware.SessionMiddleware",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,6 +10,7 @@ from accounts.models import User
 | 
				
			|||||||
from agents.models import Agent
 | 
					from agents.models import Agent
 | 
				
			||||||
from automation.models import Policy
 | 
					from automation.models import Policy
 | 
				
			||||||
from core.models import CoreSettings
 | 
					from core.models import CoreSettings
 | 
				
			||||||
 | 
					from core.utils import clear_entire_cache
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if TYPE_CHECKING:
 | 
					if TYPE_CHECKING:
 | 
				
			||||||
    from agents.models import Agent
 | 
					    from agents.models import Agent
 | 
				
			||||||
@@ -17,16 +18,7 @@ if TYPE_CHECKING:
 | 
				
			|||||||
    from checks.models import Check
 | 
					    from checks.models import Check
 | 
				
			||||||
    from scripts.models import Script
 | 
					    from scripts.models import Script
 | 
				
			||||||
 | 
					
 | 
				
			||||||
TEST_CACHE = {
 | 
					 | 
				
			||||||
    "default": {
 | 
					 | 
				
			||||||
        "BACKEND": "tacticalrmm.cache.TacticalDummyCache",
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
@override_settings(
 | 
					 | 
				
			||||||
    CACHES=TEST_CACHE,
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
class TacticalTestCase(TestCase):
 | 
					class TacticalTestCase(TestCase):
 | 
				
			||||||
    client: APIClient
 | 
					    client: APIClient
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -102,6 +94,7 @@ class TacticalTestCase(TestCase):
 | 
				
			|||||||
    def check_not_authorized(
 | 
					    def check_not_authorized(
 | 
				
			||||||
        self, method: str, url: str, data: Optional[Dict[Any, Any]] = {}
 | 
					        self, method: str, url: str, data: Optional[Dict[Any, Any]] = {}
 | 
				
			||||||
    ) -> None:
 | 
					    ) -> None:
 | 
				
			||||||
 | 
					        clear_entire_cache()
 | 
				
			||||||
        try:
 | 
					        try:
 | 
				
			||||||
            r = getattr(self.client, method)(url, data, format="json")
 | 
					            r = getattr(self.client, method)(url, data, format="json")
 | 
				
			||||||
            self.assertEqual(r.status_code, 403)
 | 
					            self.assertEqual(r.status_code, 403)
 | 
				
			||||||
@@ -111,6 +104,7 @@ class TacticalTestCase(TestCase):
 | 
				
			|||||||
    def check_authorized(
 | 
					    def check_authorized(
 | 
				
			||||||
        self, method: str, url: str, data: Optional[Dict[Any, Any]] = {}
 | 
					        self, method: str, url: str, data: Optional[Dict[Any, Any]] = {}
 | 
				
			||||||
    ) -> Any:
 | 
					    ) -> Any:
 | 
				
			||||||
 | 
					        clear_entire_cache()
 | 
				
			||||||
        try:
 | 
					        try:
 | 
				
			||||||
            r = getattr(self.client, method)(url, data, format="json")
 | 
					            r = getattr(self.client, method)(url, data, format="json")
 | 
				
			||||||
            self.assertNotEqual(r.status_code, 403)
 | 
					            self.assertNotEqual(r.status_code, 403)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user