blob: dcbf63d537cae8e63148c054298a64d81625cdf6 [file] [log] [blame]
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
from __future__ import annotations
import jmespath
import pytest
from tests.charts.helm_template_generator import render_chart
class LogGroomerTestBase:
obj_name: str = ""
folder: str = ""
def test_log_groomer_collector_default_enabled(self):
if self.obj_name == "dag-processor":
values = {"dagProcessor": {"enabled": True}}
else:
values = None
docs = render_chart(
values=values, show_only=[f"templates/{self.folder}/{self.obj_name}-deployment.yaml"]
)
assert 2 == len(jmespath.search("spec.template.spec.containers", docs[0]))
assert f"{self.obj_name}-log-groomer" in [
c["name"] for c in jmespath.search("spec.template.spec.containers", docs[0])
]
def test_log_groomer_collector_can_be_disabled(self):
if self.obj_name == "dag-processor":
values = {
"dagProcessor": {
"enabled": True,
"logGroomerSidecar": {"enabled": False},
}
}
else:
values = {f"{self.folder}": {"logGroomerSidecar": {"enabled": False}}}
docs = render_chart(
values=values,
show_only=[f"templates/{self.folder}/{self.obj_name}-deployment.yaml"],
)
actual = jmespath.search("spec.template.spec.containers", docs[0])
assert len(actual) == 1
def test_log_groomer_collector_default_command_and_args(self):
if self.obj_name == "dag-processor":
values = {"dagProcessor": {"enabled": True}}
else:
values = None
docs = render_chart(
values=values, show_only=[f"templates/{self.folder}/{self.obj_name}-deployment.yaml"]
)
assert jmespath.search("spec.template.spec.containers[1].command", docs[0]) is None
assert ["bash", "/clean-logs"] == jmespath.search("spec.template.spec.containers[1].args", docs[0])
def test_log_groomer_collector_default_retention_days(self):
if self.obj_name == "dag-processor":
values = {"dagProcessor": {"enabled": True}}
else:
values = None
docs = render_chart(
values=values, show_only=[f"templates/{self.folder}/{self.obj_name}-deployment.yaml"]
)
assert "AIRFLOW__LOG_RETENTION_DAYS" == jmespath.search(
"spec.template.spec.containers[1].env[0].name", docs[0]
)
assert "15" == jmespath.search("spec.template.spec.containers[1].env[0].value", docs[0])
@pytest.mark.parametrize("command", [None, ["custom", "command"]])
@pytest.mark.parametrize("args", [None, ["custom", "args"]])
def test_log_groomer_command_and_args_overrides(self, command, args):
if self.obj_name == "dag-processor":
values = {
"dagProcessor": {
"enabled": True,
"logGroomerSidecar": {"command": command, "args": args},
}
}
else:
values = {f"{self.folder}": {"logGroomerSidecar": {"command": command, "args": args}}}
docs = render_chart(
values=values,
show_only=[f"templates/{self.folder}/{self.obj_name}-deployment.yaml"],
)
assert command == jmespath.search("spec.template.spec.containers[1].command", docs[0])
assert args == jmespath.search("spec.template.spec.containers[1].args", docs[0])
def test_log_groomer_command_and_args_overrides_are_templated(self):
if self.obj_name == "dag-processor":
values = {
"dagProcessor": {
"enabled": True,
"logGroomerSidecar": {
"command": ["{{ .Release.Name }}"],
"args": ["{{ .Release.Service }}"],
},
}
}
else:
values = {
f"{self.folder}": {
"logGroomerSidecar": {
"command": ["{{ .Release.Name }}"],
"args": ["{{ .Release.Service }}"],
}
}
}
docs = render_chart(
values=values,
show_only=[f"templates/{self.folder}/{self.obj_name}-deployment.yaml"],
)
assert ["release-name"] == jmespath.search("spec.template.spec.containers[1].command", docs[0])
assert ["Helm"] == jmespath.search("spec.template.spec.containers[1].args", docs[0])
@pytest.mark.parametrize("retention_days, retention_result", [(None, None), (30, "30")])
def test_log_groomer_retention_days_overrides(self, retention_days, retention_result):
if self.obj_name == "dag-processor":
values = {
"dagProcessor": {"enabled": True, "logGroomerSidecar": {"retentionDays": retention_days}}
}
else:
values = {f"{self.folder}": {"logGroomerSidecar": {"retentionDays": retention_days}}}
docs = render_chart(
values=values,
show_only=[f"templates/{self.folder}/{self.obj_name}-deployment.yaml"],
)
if retention_result:
assert "AIRFLOW__LOG_RETENTION_DAYS" == jmespath.search(
"spec.template.spec.containers[1].env[0].name", docs[0]
)
assert retention_result == jmespath.search(
"spec.template.spec.containers[1].env[0].value", docs[0]
)
else:
assert jmespath.search("spec.template.spec.containers[1].env", docs[0]) is None
def test_log_groomer_resources(self):
if self.obj_name == "dag-processor":
values = {
"dagProcessor": {
"enabled": True,
"logGroomerSidecar": {
"resources": {
"requests": {"memory": "2Gi", "cpu": "1"},
"limits": {"memory": "3Gi", "cpu": "2"},
}
},
}
}
else:
values = {
f"{self.folder}": {
"logGroomerSidecar": {
"resources": {
"requests": {"memory": "2Gi", "cpu": "1"},
"limits": {"memory": "3Gi", "cpu": "2"},
}
}
}
}
docs = render_chart(
values=values,
show_only=[f"templates/{self.folder}/{self.obj_name}-deployment.yaml"],
)
assert {
"limits": {
"cpu": "2",
"memory": "3Gi",
},
"requests": {
"cpu": "1",
"memory": "2Gi",
},
} == jmespath.search("spec.template.spec.containers[1].resources", docs[0])
def test_log_groomer_has_airflow_home(self):
if self.obj_name == "dag-processor":
values = {"dagProcessor": {"enabled": True}}
else:
values = None
docs = render_chart(
values=values, show_only=[f"templates/{self.folder}/{self.obj_name}-deployment.yaml"]
)
assert "AIRFLOW_HOME" == jmespath.search("spec.template.spec.containers[1].env[1].name", docs[0])