Skip to content
Snippets Groups Projects
Verified Commit 1a176bcc authored by Alexander Olofsson's avatar Alexander Olofsson
Browse files

Adding preliminary models for rest of asset types

parent f8617164
No related branches found
No related tags found
No related merge requests found
...@@ -8,3 +8,4 @@ gemspec ...@@ -8,3 +8,4 @@ gemspec
gem "minitest", "~> 5.0" gem "minitest", "~> 5.0"
gem "rake", "~> 13.0" gem "rake", "~> 13.0"
gem "rubocop", "~> 1.21" gem "rubocop", "~> 1.21"
gem "webmock"
# frozen_string_literal: true
# Storage for generic model components
module LiudeskCMDB::Models::Generic
autoload :Client, "liudesk_cmdb/models/generic/client"
end
# frozen_string_literal: true
module LiudeskCMDB::Models::Generic
# Generic client model, for Linux/Windows/Mac Client/ComputerLab assets
#
# @!attribute [r] created_date
# @return [Time] the date of creation
# @!attribute [r] updated_date
# @return [Time] the date of change
# @!attribute hardware_id
# @return [String] the ID for the underlying HardwareV1 object
# @!attribute hostname
# @return [String] the hostname of the client
# @!attribute division
# @return [String?] the division the client belongs to
module Client
def self.included(base)
base.class_eval do
identifier :hostname
access_fields \
:hostname, :division, :asset_owner, :certificate_information,
:network_access_role, :hardware_id,
:operating_system_type, :operating_system, :operating_system_install_date,
:ad_creation_date, :active_directory_ou, :client_classification,
:management_system, :management_system_id, :network_certificate_ca,
:misc_information
field_attributes :hostname, name: "hostName"
field_attributes :hardware_id, name: "hardwareID"
field_attributes :active_directory_ou, name: "activeDirectoryOU"
field_attributes :operating_system_install_date, convert: Time
field_attributes :ad_creation_date, convert: Time
end
end
def to_s
hostname
end
# Get an instance of the underlying hardware object
#
# @return [HardwareV1] the hardware underlying this client
def hardware
@hardware ||= LiudeskCMDB::Models::HardwareV1.get(client, hardware_id)
end
# Change the underlying hardware object
#
# @param hardware [HardwareV1] the new hardware object to assign
def hardware=(hardware)
raise ArgumentError, "Must be a HardwareV1" unless hardware.is_a? LinudeskCMDB::Models::HardwareV1
self.hardware_id = hardware.guid if hardware
@hardware = hardware
end
end
end
...@@ -2,56 +2,11 @@ ...@@ -2,56 +2,11 @@
module LiudeskCMDB::Models module LiudeskCMDB::Models
# Linux Client v1 # Linux Client v1
#
# @!attribute [r] created_date
# @return [Time] the date of creation
# @!attribute [r] updated_date
# @return [Time] the date of change
# @!attribute hardware_id
# @return [String] the ID for the underlying HardwareV1 object
# @!attribute hostname
# @return [String] the hostname of the client
# @!attribute division
# @return [String?] the division the client belongs to
class LinuxClientV1 < LiudeskCMDB::Model class LinuxClientV1 < LiudeskCMDB::Model
include LiudeskCMDB::Models::Generic::Client
api_name "Clients" api_name "Clients"
model_name "linux" model_name "linux"
model_version :v1 model_version :v1
identifier :hostname
access_fields \
:hostname, :division, :asset_owner, :certificate_information,
:network_access_role, :hardware_id,
:operating_system_type, :operating_system, :operating_system_install_date,
:ad_creation_date, :active_directory_ou, :client_classification,
:management_system, :management_system_id, :network_certificate_ca
field_attributes :hostname, name: "hostName"
field_attributes :hardware_id, name: "hardwareID"
field_attributes :active_directory_ou, name: "activeDirectoryOU"
field_attributes :operating_system_install_date, convert: Time
field_attributes :ad_creation_date, convert: Time
def to_s
hostname
end
# Get an instance of the underlying hardware object
#
# @return [HardwareV1] the hardware underlying this client
def hardware
@hardware ||= LiudeskCMDB::Models::HardwareV1.get(client, hardware_id)
end
# Change the underlying hardware object
#
# @param hardware [HardwareV1] the new hardware object to assign
def hardware=(hardware)
raise ArgumentError, "Must be a HardwareV1" unless hardware.is_a? LinudeskCMDB::Models::HardwareV1
self.hardware_id = hardware.guid if hardware
@hardware = hardware
end
end end
end end
# frozen_string_literal: true
module LiudeskCMDB::Models
# Linux Client v1
class LinuxComputerlabV1 < LiudeskCMDB::Model
include LiudeskCMDB::Models::Generic::Client
api_name "ComputerLabs"
model_name "linux"
model_version :v1
end
end
# frozen_string_literal: true
module LiudeskCMDB::Models
# Mac Client v1
class MacClientV1 < LiudeskCMDB::Model
include LiudeskCMDB::Models::Generic::Client
api_name "Clients"
model_name "mac"
model_version :v1
end
end
# frozen_string_literal: true
module LiudeskCMDB::Models
# Windows Client v1
class WindowsClientV1 < LiudeskCMDB::Model
include LiudeskCMDB::Models::Generic::Client
api_name "Clients"
model_name "windows"
model_version :v1
end
end
# frozen_string_literal: true
module LiudeskCMDB::Models
# Windows ComputerLab v1
class WindowsComputerlabV1 < LiudeskCMDB::Model
include LiudeskCMDB::Models::Generic::Client
api_name "ComputerLabs"
model_name "windows"
model_version :v1
end
end
{
"managementSystem": "",
"managementSystemId": "",
"createdDate": "2023-05-22T13:47:50.240Z",
"updatedDate": "2023-07-03T07:14:33.794Z",
"archived": false,
"clientClassification": null,
"networkCertificateCa": null,
"adCreationDate": null,
"activeDirectoryOU": null,
"hardwareID": "2f90ced1-1916-45db-b2cf-a6ad66f69aba",
"operatingSystemType": "lnx Red Hat Enterprise Linux release 8.8 (Ootpa)",
"operatingSystem": "8.8",
"operatingSystemInstallDate": null,
"hostName": "client.localhost.localdomain",
"certificateInformation": null,
"networkAccessRole": "None",
"division": null,
"assetOwner": null
}
...@@ -6,3 +6,8 @@ $LOAD_PATH.unshift File.expand_path("../lib", __dir__) ...@@ -6,3 +6,8 @@ $LOAD_PATH.unshift File.expand_path("../lib", __dir__)
require "liudesk_cmdb" require "liudesk_cmdb"
require "minitest/autorun" require "minitest/autorun"
require "webmock/minitest"
def setup_cmdb_client
LiudeskCMDB::Client.new 'https://example.com', subscription_key: 'testing'
end
...@@ -4,7 +4,7 @@ require "test_helper" ...@@ -4,7 +4,7 @@ require "test_helper"
class TestV1Models < Minitest::Test class TestV1Models < Minitest::Test
def setup def setup
@client = Minitest::Mock.new @client = setup_cmdb_client
end end
def test_that_hardware_works def test_that_hardware_works
...@@ -19,22 +19,21 @@ class TestV1Models < Minitest::Test ...@@ -19,22 +19,21 @@ class TestV1Models < Minitest::Test
assert_raises(NoMethodError) { hardware.created_date = "Something else" } assert_raises(NoMethodError) { hardware.created_date = "Something else" }
assert_raises(NoMethodError) { hardware.updated_date = "Something else" } assert_raises(NoMethodError) { hardware.updated_date = "Something else" }
@client.expect( stub_post = stub_request(:post, "https://example.com/liudesk-cmdb/api/Hardware").with(
:post, File.read("test/fixtures/post_hardware.json"), body: {
[ make: "HP",
"liudesk-cmdb/api/Hardware", :v1, model: "Elitebook",
{ serialNumber: "abc123",
"make" => "HP", purchaseDate: "2023-06-12T11:58:05.000Z"
"model" => "Elitebook", }
"serialNumber" => "abc123", ).to_return(
"purchaseDate" => "2023-06-12T11:58:05.000Z" status: 200,
} body: File.read("test/fixtures/post_hardware.json")
]
) )
hardware.create hardware.create
@client.verify assert_requested stub_post
refute hardware.unknown_fields? refute hardware.unknown_fields?
assert_equal "HP", hardware.make assert_equal "HP", hardware.make
...@@ -66,19 +65,18 @@ class TestV1Models < Minitest::Test ...@@ -66,19 +65,18 @@ class TestV1Models < Minitest::Test
hardware.supplier = "Dustin" hardware.supplier = "Dustin"
@client.expect( stub_patch = stub_request(:patch, "https://example.com/liudesk-cmdb/api/Hardware/8e2cbcf0-1c79-4b4e-8813-71f8da3c3d81").with(
:patch, File.read("test/fixtures/post_hardware.json"), body: {
[ supplier: "Dustin"
"liudesk-cmdb/api/Hardware/8e2cbcf0-1c79-4b4e-8813-71f8da3c3d81", :v1, }
{ ).to_return(
"supplier" => "Dustin" status: 200,
} body: File.read("test/fixtures/post_hardware.json")
]
) )
hardware.update hardware.update
@client.verify assert_requested stub_patch
assert_equal "Guest", hardware.network_access_role assert_equal "Guest", hardware.network_access_role
assert_equal "ATEA", hardware.supplier assert_equal "ATEA", hardware.supplier
...@@ -87,39 +85,35 @@ class TestV1Models < Minitest::Test ...@@ -87,39 +85,35 @@ class TestV1Models < Minitest::Test
assert_equal "Dustin", hardware.supplier assert_equal "Dustin", hardware.supplier
@client.expect( stub_get = stub_request(:get, "https://example.com/liudesk-cmdb/api/Hardware/8e2cbcf0-1c79-4b4e-8813-71f8da3c3d81").to_return(
:get, File.read("test/fixtures/post_hardware.json"), status: 200,
[ body: File.read("test/fixtures/post_hardware.json")
"liudesk-cmdb/api/Hardware/8e2cbcf0-1c79-4b4e-8813-71f8da3c3d81", :v1
]
) )
hardware.refresh hardware.refresh
@client.verify assert_requested stub_get
assert_equal "ATEA", hardware.supplier assert_equal "ATEA", hardware.supplier
@client.expect( stub_delete = stub_request(:delete, "https://example.com/liudesk-cmdb/api/Hardware/8e2cbcf0-1c79-4b4e-8813-71f8da3c3d81").to_return(
:delete, nil, status: 204,
[
"liudesk-cmdb/api/Hardware/8e2cbcf0-1c79-4b4e-8813-71f8da3c3d81", :v1
]
) )
hardware.destroy hardware.destroy
@client.verify assert_requested stub_delete
@client.expect(:get, File.read("test/fixtures/search_hardware.json")) do |path, ver, **args| stub_get = stub_request(:get, "https://example.com/liudesk-cmdb/api/Hardware/search").with(
path == "liudesk-cmdb/api/Hardware/search" && ver == :v1 && args == { query: { query: { query: "make==HP" }
query: "make==HP" ).to_return(
} } status: 200,
end body: File.read("test/fixtures/search_hardware.json")
)
hardwares = LiudeskCMDB::Models::HardwareV1.search(@client, make: "HP") hardwares = LiudeskCMDB::Models::HardwareV1.search(@client, make: "HP")
@client.verify assert_requested stub_get
hardware = hardwares.first hardware = hardwares.first
...@@ -153,13 +147,14 @@ class TestV1Models < Minitest::Test ...@@ -153,13 +147,14 @@ class TestV1Models < Minitest::Test
end end
def test_that_server_works def test_that_server_works
@client.expect(:get, File.read("test/fixtures/list_servers.json")) do |path, ver, **args| stub_get = stub_request(:get, "https://example.com/liudesk-cmdb/api/Server").to_return(
path == "liudesk-cmdb/api/Server" && ver == :v1 && args == { query: {} } status: 200,
end body: File.read("test/fixtures/list_servers.json")
)
servers = LiudeskCMDB::Models::ServerV1.list(@client) servers = LiudeskCMDB::Models::ServerV1.list(@client)
@client.verify assert_requested stub_get
server = servers.first server = servers.first
...@@ -185,16 +180,14 @@ class TestV1Models < Minitest::Test ...@@ -185,16 +180,14 @@ class TestV1Models < Minitest::Test
assert_equal Time.parse("2023-04-06T14:15:58Z"), server.created_date assert_equal Time.parse("2023-04-06T14:15:58Z"), server.created_date
assert_equal Time.parse("2023-04-06T14:15:58Z"), server.updated_date assert_equal Time.parse("2023-04-06T14:15:58Z"), server.updated_date
@client.expect( stub_get = stub_request(:get, "https://example.com/liudesk-cmdb/api/Hardware/8e2cbcf0-1c79-4b4e-8813-71f8da3c3d81").to_return(
:get, File.read("test/fixtures/post_hardware.json"), status: 200,
[ body: File.read("test/fixtures/post_hardware.json")
"liudesk-cmdb/api/Hardware/8e2cbcf0-1c79-4b4e-8813-71f8da3c3d81", :v1
]
) )
hardware = server.hardware hardware = server.hardware
@client.verify assert_requested stub_get
refute hardware.unknown_fields? refute hardware.unknown_fields?
assert_equal "HP", hardware.make assert_equal "HP", hardware.make
...@@ -228,17 +221,68 @@ class TestV1Models < Minitest::Test ...@@ -228,17 +221,68 @@ class TestV1Models < Minitest::Test
def test_handling_of_unexpected_data def test_handling_of_unexpected_data
server = LiudeskCMDB::Models::ServerV1.new(@client, hostname: 'test.example.com') server = LiudeskCMDB::Models::ServerV1.new(@client, hostname: 'test.example.com')
@client.expect(:get, '{"hostName":"test.example.com","networkAccessRole":"None","unknownField":"Data"}') do |path, ver, **args| stub_get = stub_request(:get, "https://example.com/liudesk-cmdb/api/Server/test.example.com").to_return(
path == "liudesk-cmdb/api/Server/test.example.com" && ver == :v1 status: 200,
end body: {
hostName: "test.example.com",
networkAccessRole: "None",
unknownField: "Data"
}.to_json
)
assert server.refresh assert server.refresh
@client.verify assert_requested stub_get
assert server.unknown_fields? assert server.unknown_fields?
assert_equal "test.example.com", server.hostname assert_equal "test.example.com", server.hostname
assert_equal "None", server.network_access_role assert_equal "None", server.network_access_role
assert_equal "Data", server.unknown_fields["unknownField"] assert_equal "Data", server.unknown_fields["unknownField"]
end end
def test_handling_of_clients
models = {
LiudeskCMDB::Models::LinuxClientV1 => [
{
method: :get,
request: :get,
url: 'liudesk-cmdb/api/Clients/linux/%<identifier>s',
body: 'test/fixtures/get_linuxclient.json'
}
],
LiudeskCMDB::Models::MacClientV1 => [
],
LiudeskCMDB::Models::WindowsClientV1 => [
],
LiudeskCMDB::Models::LinuxComputerlabV1 => [
],
# LiudeskCMDB::Models::MacComputerlabV1,
LiudeskCMDB::Models::WindowsComputerlabV1 => [
],
}
identifier = "client.localhost.localdomain"
models.each do |klass, requests|
instance = klass.new(@client, identifier)
assert instance
requests.each do |req|
stub = stub_request(req[:request], "https://example.com/#{req[:url] % { identifier: identifier }}").to_return(
status: req.fetch(:status, 200),
body: req.fetch(:body_data, File.read(req[:body]))
)
result = nil
case req[:method]
when :get
result = klass.get(@client, identifier)
end
assert_requested stub
assert result unless req[:method] == :delete
end
end
end
end end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment