File indexing completed on 2026-04-27 07:41:42
0001 from django.test import TestCase
0002 from django.urls import reverse
0003 from django.contrib.auth.models import User
0004 from django.utils import timezone
0005 from rest_framework.test import APITestCase, APIClient
0006 from rest_framework import status
0007 from monitor_app.models import SystemAgent, AppLog, Run, StfFile, Subscriber
0008 from monitor_app.serializers import AppLogSerializer
0009 from django.core.management import call_command
0010 from io import StringIO
0011 import logging
0012 import uuid
0013 import re
0014
0015
0016 class AppLogAPITests(APITestCase):
0017 def setUp(self):
0018 unique_username = f"testuser_{uuid.uuid4()}"
0019 self.user = User.objects.create_user(username=unique_username, password='testpassword')
0020 self.client.force_authenticate(user=self.user)
0021 self.url = reverse('monitor_app:applog-list')
0022 self.log_data = {
0023 'app_name': 'test_app',
0024 'instance_name': 'test_instance',
0025 'timestamp': timezone.now().isoformat(),
0026 'level': logging.INFO,
0027 'levelname': 'INFO',
0028 'message': 'This is a test log message.',
0029 'module': 'test_module',
0030 'funcname': 'test_func',
0031 'lineno': 123,
0032 'process': 456,
0033 'thread': 789,
0034 }
0035
0036 def test_create_log(self):
0037 """
0038 Ensure we can create a new app log.
0039 """
0040 response = self.client.post(self.url, self.log_data, format='json')
0041 self.assertEqual(response.status_code, status.HTTP_201_CREATED, response.data)
0042 self.assertEqual(AppLog.objects.count(), 1)
0043 log = AppLog.objects.get()
0044 self.assertEqual(log.app_name, 'test_app')
0045 self.assertEqual(log.message, self.log_data['message'])
0046
0047 def test_create_log_invalid_level(self):
0048 """
0049 Ensure we get a bad request for an invalid log level.
0050 """
0051 data = self.log_data.copy()
0052 data['level'] = 999
0053 response = self.client.post(self.url, data, format='json')
0054 self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
0055
0056 def test_create_log_missing_field(self):
0057 """
0058 Ensure we get a bad request for missing a required field.
0059 """
0060 data = self.log_data.copy()
0061 del data['message']
0062 response = self.client.post(self.url, data, format='json')
0063 self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)