Skip to content

Commit

Permalink
Add: Implement Feed command
Browse files Browse the repository at this point in the history
  • Loading branch information
bjoernricks committed Mar 12, 2024
1 parent 97f4b9f commit b438786
Show file tree
Hide file tree
Showing 4 changed files with 117 additions and 3 deletions.
14 changes: 14 additions & 0 deletions gvm/protocols/gmp/_gmp224.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
AggregateStatistic,
Authentication,
EntityType,
Feed,
FeedType,
PortList,
PortRangeType,
SortOrder,
Expand Down Expand Up @@ -268,3 +270,15 @@ def get_aggregates(
**kwargs,
)
)

def get_feeds(self) -> T:
"""Request the list of feeds"""
return self._send_and_transform_command(Feed.get_feeds())

def get_feed(self, feed_type: Union[FeedType, str]) -> T:
"""Request a single feed
Arguments:
feed_type: Type of single feed to get: NVT, CERT or SCAP
"""
return self._send_and_transform_command(Feed.get_feed(feed_type))
9 changes: 6 additions & 3 deletions gvm/protocols/gmp/requests/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,22 @@
from ._aggregates import Aggregates, AggregateStatistic, SortOrder
from ._auth import Authentication
from ._entity_type import EntityType
from ._feed import Feed, FeedType
from ._port_list import PortList, PortRangeType
from ._resource_names import ResourceNames, ResourceType
from ._version import Version

__all__ = (
"AggregateStatistic",
"Aggregates",
"AggregateStatistic",
"Authentication",
"EntityType",
"Feed",
"FeedType",
"PortList",
"PortRangeType",
"Version",
"ResourceNames",
"ResourceType",
"SortOrder",
"EntityType",
"Version",
)
46 changes: 46 additions & 0 deletions gvm/protocols/gmp/requests/_feed.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# SPDX-FileCopyrightText: 2024 Greenbone AG
#
# SPDX-License-Identifier: GPL-3.0-or-later

from typing import Union

from gvm._enum import Enum
from gvm.errors import RequiredArgument
from gvm.protocols.core import Request
from gvm.xml import XmlCommand


class FeedType(Enum):
"""Enum for feed types"""

NVT = "NVT"
CERT = "CERT"
SCAP = "SCAP"
GVMD_DATA = "GVMD_DATA"


class Feed:
@staticmethod
def get_feeds() -> Request:
"""Request the list of feeds"""
return XmlCommand("get_feeds")

@classmethod
def get_feed(cls, feed_type: Union[FeedType, str]) -> Request:
"""Request a single feed
Arguments:
feed_type: Type of single feed to get: NVT, CERT or SCAP
"""
if not feed_type:
raise RequiredArgument(
function=cls.get_feed.__name__, argument="feed_type"
)

if not isinstance(feed_type, FeedType):
feed_type = FeedType(feed_type)

cmd = XmlCommand("get_feeds")
cmd.set_attribute("type", feed_type.value)

return cmd
51 changes: 51 additions & 0 deletions tests/protocols/gmp/requests/test_feed.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
# SPDX-FileCopyrightText: 2024 Greenbone AG
#
# SPDX-License-Identifier: GPL-3.0-or-later

import unittest

from gvm.errors import InvalidArgument, RequiredArgument
from gvm.protocols.gmp.requests import Feed, FeedType


class FeedTestCase(unittest.TestCase):
def test_get_feed(self) -> None:
"""
Test basic get_feed calls with only resource_type except special
cases for audit, policy, scan_config and task.
"""
request = Feed.get_feed(FeedType.NVT)

self.assertEqual(bytes(request), b'<get_feeds type="NVT"/>')

request = Feed.get_feed(FeedType.CERT)

self.assertEqual(bytes(request), b'<get_feeds type="CERT"/>')

request = Feed.get_feed(FeedType.SCAP)

self.assertEqual(bytes(request), b'<get_feeds type="SCAP"/>')

request = Feed.get_feed(FeedType.GVMD_DATA)

self.assertEqual(bytes(request), b'<get_feeds type="GVMD_DATA"/>')

def test_get_feed_missing_type(self):
"""
Test get_feed calls with missing resource_type
"""
with self.assertRaises(RequiredArgument):
Feed.get_feed(feed_type=None)

with self.assertRaises(RequiredArgument):
Feed.get_feed(feed_type="")

with self.assertRaises(RequiredArgument):
Feed.get_feed("")

def test_get_feed_invalid_type(self):
"""
Test get_feed calls with invalid resource_type
"""
with self.assertRaises(InvalidArgument):
Feed.get_feed("foo")

0 comments on commit b438786

Please sign in to comment.