#!/usr/bin/env python3
# SPDX-FileCopyrightText: 2009 Fermi Research Alliance, LLC
# SPDX-License-Identifier: Apache-2.0
"""
Project:
glideinWMS
Purpose:
unit test of glideinwms/frontend/gwms_renew_proxies.py
Author:
Brian Lin <brianhlin@gmail.com>
"""
import unittest
from unittest import mock
import xmlrunner
from glideinwms.frontend import gwms_renew_proxies as proxy
VOMSES = """
"GLOW" "glow-voms.cs.wisc.edu" "15001" "/DC=org/DC=opensciencegrid/O=Open Science Grid/OU=Services/CN=glow-voms.cs.wisc.edu" "GLOW"
"osg" "voms.grid.iu.edu" "15027" "/DC=org/DC=opensciencegrid/O=Open Science Grid/OU=Services/CN=voms.grid.iu.edu" "osg"
"osg" "voms1.opensciencegrid.org" "15027" "/DC=org/DC=incommon/C=US/ST=WI/L=Madison/O=University of Wisconsin-Madison/OU=OCIS/CN=voms1.opensciencegrid.org" "osg"
"xenon.biggrid.nl" "voms.grid.sara.nl" "30008" "/O=dutchgrid/O=hosts/OU=sara.nl/CN=voms.grid.sara.nl" "xenon.biggrid.nl"
"""
# FIXME: Refactor _run_command to accept **kwargs instead
[docs]
def get_opt_val(cmd, opt_name):
"""Given a command as a list, return the value of opt_name."""
return cmd[cmd.index(opt_name) + 1]
[docs]
class TestUtils(unittest.TestCase):
"""Test utility functions in gwms_renew_proxies"""
[docs]
def test_parse_vomses(self):
name_map, uri_map = proxy.parse_vomses(VOMSES)
for nocap, canonical in [("osg", "osg"), ("glow", "GLOW"), ("xenon.biggrid.nl", "xenon.biggrid.nl")]:
self.assertEqual(name_map[nocap], canonical)
for dn, uri in [
("/O=dutchgrid/O=hosts/OU=sara.nl/CN=voms.grid.sara.nl", "voms.grid.sara.nl:30008"),
(
"/DC=org/DC=opensciencegrid/O=Open Science Grid/OU=Services/CN=voms.grid.iu.edu",
"voms.grid.iu.edu:15027",
),
(
"/DC=org/DC=incommon/C=US/ST=WI/L=Madison/O=University of Wisconsin-Madison/OU=OCIS/CN=voms1.opensciencegrid.org",
"voms1.opensciencegrid.org:15027",
),
(
"/DC=org/DC=opensciencegrid/O=Open Science Grid/OU=Services/CN=glow-voms.cs.wisc.edu",
"glow-voms.cs.wisc.edu:15001",
),
]:
self.assertEqual(uri_map[dn], uri)
[docs]
@mock.patch("glideinwms.frontend.gwms_renew_proxies._run_command")
def test_voms_proxy_init(self, mock_run_command):
mock_proxy = mock.MagicMock()
proxy.voms_proxy_init(mock_proxy)
mock_run_command.assert_called_once()
for option in ("-voms", "-order"):
self.assertNotIn(option, mock_run_command.call_args[0][0])
[docs]
@mock.patch("glideinwms.frontend.gwms_renew_proxies._run_command")
def test_voms_proxy_init_with_voms(self, mock_run_command):
mock_proxy = mock.MagicMock()
mock_voms_attr = mock.Mock()
mock_voms_attr.name = "VoName"
for role, expected_val in [("NULL", "name"), ("pilot", "voms")]:
mock_voms_attr.fqan = f"/Role={role}/Capability=NULL"
mock_voms_attr.voms = f"/{mock_voms_attr.name}{mock_voms_attr.fqan}"
proxy.voms_proxy_init(mock_proxy, mock_voms_attr)
command = mock_run_command.call_args[0][0]
voms_opt = "-voms"
order_opt = "-order"
self.assertIn(voms_opt, command)
self.assertEqual(get_opt_val(command, voms_opt), getattr(mock_voms_attr, expected_val))
self.assertIn(order_opt, command)
self.assertFalse("/Capability=" in get_opt_val(command, order_opt))
[docs]
class TestVo(unittest.TestCase):
"""Test the VOMS attributes class"""
[docs]
def setUp(self):
self.vo_name = "glideinwms"
self.cmd = "/Role=NULL/Capability=NULL"
[docs]
def assertVomsAttr(self, vo, vo_name, cmd):
self.assertEqual(vo.fqan, f"/{vo_name}{cmd}")
self.assertEqual(vo.voms, f"{vo_name}:/{vo_name}{cmd}")
[docs]
def test_fqan_vo_prefix(self):
vo = proxy.VO(self.vo_name, f"/{self.vo_name}{self.cmd}")
self.assertVomsAttr(vo, self.vo_name, self.cmd)
[docs]
def test_fqan_without_vo_prefix(self):
vo = proxy.VO(self.vo_name, self.cmd)
self.assertVomsAttr(vo, self.vo_name, self.cmd)
if __name__ == "__main__":
ofl = "unittests-reports"
unittest.main(testRunner=xmlrunner.XMLTestRunner(output=ofl))