diff --git a/changelogs/fragments/darwin_facts.yml b/changelogs/fragments/darwin_facts.yml new file mode 100644 index 00000000000..bad6d97a3c7 --- /dev/null +++ b/changelogs/fragments/darwin_facts.yml @@ -0,0 +1,3 @@ +--- +bugfixes: + - Darwin - add unit tests for Darwin hardware fact gathering. diff --git a/lib/ansible/module_utils/facts/hardware/darwin.py b/lib/ansible/module_utils/facts/hardware/darwin.py index 74e4ce4e2af..b35b8b1658e 100644 --- a/lib/ansible/module_utils/facts/hardware/darwin.py +++ b/lib/ansible/module_utils/facts/hardware/darwin.py @@ -19,7 +19,6 @@ from __future__ import annotations import struct import time -from ansible.module_utils.common.process import get_bin_path from ansible.module_utils.facts.hardware.base import Hardware, HardwareCollector from ansible.module_utils.facts.sysctl import get_sysctl @@ -41,7 +40,7 @@ class DarwinHardware(Hardware): def populate(self, collected_facts=None): hardware_facts = {} - self.sysctl = get_sysctl(self.module, ['hw', 'machdep', 'kern']) + self.sysctl = get_sysctl(self.module, ['hw', 'machdep', 'kern', 'hw.model']) mac_facts = self.get_mac_facts() cpu_facts = self.get_cpu_facts() memory_facts = self.get_memory_facts() @@ -67,9 +66,8 @@ class DarwinHardware(Hardware): def get_mac_facts(self): mac_facts = {} - rc, out, err = self.module.run_command("sysctl hw.model") - if rc == 0: - mac_facts['model'] = mac_facts['product_name'] = out.splitlines()[-1].split()[1] + if 'hw.model' in self.sysctl: + mac_facts['model'] = mac_facts['product_name'] = self.sysctl['hw.model'] mac_facts['osversion'] = self.sysctl['kern.osversion'] mac_facts['osrevision'] = self.sysctl['kern.osrevision'] @@ -96,9 +94,8 @@ class DarwinHardware(Hardware): total_used = 0 page_size = 4096 - try: - vm_stat_command = get_bin_path('vm_stat') - except ValueError: + vm_stat_command = self.module.get_bin_path('vm_stat') + if vm_stat_command is None: return memory_facts rc, out, err = self.module.run_command(vm_stat_command) diff --git a/test/units/module_utils/facts/hardware/fixtures/sysctl_darwin.txt b/test/units/module_utils/facts/hardware/fixtures/sysctl_darwin.txt new file mode 100644 index 00000000000..0cd9b1cd5f0 --- /dev/null +++ b/test/units/module_utils/facts/hardware/fixtures/sysctl_darwin.txt @@ -0,0 +1,545 @@ +hw.ncpu: 10 +hw.byteorder: 1234 +hw.memsize: 34359738368 +hw.activecpu: 10 +hw.optional.arm.FEAT_FlagM: 1 +hw.optional.arm.FEAT_FlagM2: 1 +hw.optional.arm.FEAT_FHM: 1 +hw.optional.arm.FEAT_DotProd: 1 +hw.optional.arm.FEAT_SHA3: 1 +hw.optional.arm.FEAT_RDM: 1 +hw.optional.arm.FEAT_LSE: 1 +hw.optional.arm.FEAT_SHA256: 1 +hw.optional.arm.FEAT_SHA512: 1 +hw.optional.arm.FEAT_SHA1: 1 +hw.optional.arm.FEAT_AES: 1 +hw.optional.arm.FEAT_PMULL: 1 +hw.optional.arm.FEAT_SPECRES: 0 +hw.optional.arm.FEAT_SB: 1 +hw.optional.arm.FEAT_FRINTTS: 1 +hw.optional.arm.FEAT_LRCPC: 1 +hw.optional.arm.FEAT_LRCPC2: 1 +hw.optional.arm.FEAT_FCMA: 1 +hw.optional.arm.FEAT_JSCVT: 1 +hw.optional.arm.FEAT_PAuth: 1 +hw.optional.arm.FEAT_PAuth2: 0 +hw.optional.arm.FEAT_FPAC: 0 +hw.optional.arm.FEAT_DPB: 1 +hw.optional.arm.FEAT_DPB2: 1 +hw.optional.arm.FEAT_BF16: 0 +hw.optional.arm.FEAT_I8MM: 0 +hw.optional.arm.FEAT_ECV: 0 +hw.optional.arm.FEAT_LSE2: 1 +hw.optional.arm.FEAT_CSV2: 1 +hw.optional.arm.FEAT_CSV3: 1 +hw.optional.arm.FEAT_DIT: 1 +hw.optional.arm.FEAT_FP16: 1 +hw.optional.arm.FEAT_SSBS: 1 +hw.optional.arm.FEAT_BTI: 0 +hw.optional.arm.FP_SyncExceptions: 1 +hw.optional.floatingpoint: 1 +hw.optional.neon: 1 +hw.optional.neon_hpfp: 1 +hw.optional.neon_fp16: 1 +hw.optional.armv8_1_atomics: 1 +hw.optional.armv8_2_fhm: 1 +hw.optional.armv8_2_sha512: 1 +hw.optional.armv8_2_sha3: 1 +hw.optional.armv8_3_compnum: 1 +hw.optional.watchpoint: 4 +hw.optional.breakpoint: 6 +hw.optional.armv8_crc32: 1 +hw.optional.armv8_gpi: 1 +hw.optional.AdvSIMD: 1 +hw.optional.AdvSIMD_HPFPCvt: 1 +hw.optional.ucnormal_mem: 1 +hw.optional.arm64: 1 +hw.features.allows_security_research: 0 +hw.perflevel0.physicalcpu: 8 +hw.perflevel0.physicalcpu_max: 8 +hw.perflevel0.logicalcpu: 8 +hw.perflevel0.logicalcpu_max: 8 +hw.perflevel0.l1icachesize: 196608 +hw.perflevel0.l1dcachesize: 131072 +hw.perflevel0.l2cachesize: 12582912 +hw.perflevel0.cpusperl2: 4 +hw.perflevel0.name: Performance +hw.perflevel1.physicalcpu: 2 +hw.perflevel1.physicalcpu_max: 2 +hw.perflevel1.logicalcpu: 2 +hw.perflevel1.logicalcpu_max: 2 +hw.perflevel1.l1icachesize: 131072 +hw.perflevel1.l1dcachesize: 65536 +hw.perflevel1.l2cachesize: 4194304 +hw.perflevel1.cpusperl2: 2 +hw.perflevel1.name: Efficiency +hw.physicalcpu: 10 +hw.physicalcpu_max: 10 +hw.logicalcpu: 10 +hw.logicalcpu_max: 10 +hw.cputype: 16777228 +hw.cpusubtype: 2 +hw.cpu64bit_capable: 1 +hw.cpufamily: 458787763 +hw.cpusubfamily: 4 +hw.cacheconfig: 10 1 2 0 0 0 0 0 0 0 +hw.cachesize: 3624484864 65536 4194304 0 0 0 0 0 0 0 +hw.pagesize: 16384 +hw.pagesize32: 16384 +hw.cachelinesize: 128 +hw.l1icachesize: 131072 +hw.l1dcachesize: 65536 +hw.l2cachesize: 4194304 +hw.tbfrequency: 24000000 +hw.memsize_usable: 33689255936 +hw.packages: 1 +hw.osenvironment: +hw.ephemeral_storage: 0 +hw.use_recovery_securityd: 0 +hw.use_kernelmanagerd: 1 +hw.serialdebugmode: 0 +hw.nperflevels: 2 +hw.targettype: J316s +machdep.cpu.cores_per_package: 10 +machdep.cpu.core_count: 10 +machdep.cpu.logical_per_package: 10 +machdep.cpu.thread_count: 10 +machdep.cpu.brand_string: Apple M1 Pro +machdep.wake_abstime: 29357137973972 +machdep.time_since_reset: 66556948949 +machdep.wake_conttime: 60496916583785 +machdep.deferred_ipi_timeout: 64000 +machdep.virtual_address_size: 47 +machdep.report_phy_read_delay: 0 +machdep.report_phy_write_delay: 0 +machdep.trace_phy_read_delay: 0 +machdep.trace_phy_write_delay: 0 +machdep.phy_read_delay_panic: 0 +machdep.phy_write_delay_panic: 0 +machdep.ptrauth_enabled: 1 +machdep.user_idle_level: 0 +kern.ostype: Darwin +kern.osrelease: 23.4.0 +kern.osrevision: 199506 +kern.version: Darwin Kernel Version 23.4.0: Fri Mar 15 00:10:42 PDT 2024; root:xnu-10063.101.17~1/RELEASE_ARM64_T6000 +kern.maxvnodes: 263168 +kern.maxproc: 8000 +kern.maxfiles: 245760 +kern.argmax: 1048576 +kern.securelevel: 0 +kern.hostname: akasurde-mac +kern.hostid: 0 +kern.clockrate: { hz = 100, tick = 10000, tickadj = 0, profhz = 100, stathz = 100 } +kern.posix1version: 200112 +kern.ngroups: 16 +kern.job_control: 1 +kern.saved_ids: 1 +kern.boottime: { sec = 1711644864, usec = 393940 } Thu Mar 28 09:54:24 2024 +kern.nisdomainname: +kern.maxfilesperproc: 122880 +kern.maxprocperuid: 5333 +kern.ipc.maxsockbuf: 8388608 +kern.ipc.sockbuf_waste_factor: 8 +kern.ipc.somaxconn: 128 +kern.ipc.nmbclusters: 262144 +kern.ipc.soqlimitcompat: 1 +kern.ipc.io_policy.log: 0 +kern.ipc.io_policy.uuid: 1 +kern.ipc.mb_memory_pressure_percentage: 80 +kern.ipc.mb_uses_mcache: 0 +kern.ipc.mb_tag_mbuf: 0 +kern.ipc.socket_debug: 0 +kern.ipc.sosend_assert_panic: 0 +kern.ipc.sodefunct_calls: 5813 +kern.ipc.sosendminchain: 16384 +kern.ipc.sorecvmincopy: 16384 +kern.ipc.sosendjcl: 1 +kern.ipc.sosendjcl_ignore_capab: 0 +kern.ipc.sosendbigcl_ignore_capab: 0 +kern.ipc.sodefunctlog: 0 +kern.ipc.sothrottlelog: 0 +kern.ipc.sorestrictrecv: 1 +kern.ipc.sorestrictsend: 1 +kern.ipc.soreserveheadroom: 1 +kern.ipc.maxextbkidleperproc: 1 +kern.ipc.extbkidletime: 600 +kern.ipc.extbkidlercvhiwat: 131072 +kern.ipc.sotcdb: 0 +kern.ipc.throttle_best_effort: 0 +kern.ipc.njcl: 87384 +kern.ipc.njclbytes: 16384 +kern.ipc.soqlencomp: 0 +kern.ipc.maxsendmsgx: 256 +kern.ipc.maxrecvmsgx: 256 +kern.ipc.missingpktinfo: 0 +kern.ipc.do_recvmsg_x_donttrunc: 0 +kern.ipc.sendmsg_x_mode: 0 +kern.usrstack: 1861173248 +kern.netboot: 0 +kern.sysv.shmmax: 4194304 +kern.sysv.shmmin: 1 +kern.sysv.shmmni: 32 +kern.sysv.shmseg: 8 +kern.sysv.shmall: 1024 +kern.sysv.semmni: 87381 +kern.sysv.semmns: 87381 +kern.sysv.semmnu: 87381 +kern.sysv.semmsl: 87381 +kern.sysv.semume: 10 +kern.aiomax: 90 +kern.aioprocmax: 16 +kern.aiothreads: 4 +kern.corefile: /cores/core.%P +kern.coredump: 1 +kern.sugid_coredump: 0 +kern.delayterm: 0 +kern.shreg_private: 0 +kern.posix.sem.max: 10000 +kern.usrstack64: 6156140544 +kern.tfp.policy: 2 +kern.procname: sysctl +kern.speculative_reads_disabled: 0 +kern.osversion: 23E224 +kern.safeboot: 0 +kern.rage_vnode: 0 +kern.tty.ptmx_max: 511 +kern.check_openevt: 0 +kern.threadname: +kern.skywalk.netif.netif_queue_stat_enable: 0 +kern.skywalk.netif.default_drop: 0 +kern.skywalk.flowswitch.rx_agg_tcp: 16384 +kern.skywalk.flowswitch.rx_agg_tcp_host: 2 +kern.skywalk.flowswitch.gso_mtu: 16384 +kern.skywalk.flowswitch.ip_reass: 2 +kern.skywalk.flowswitch.ipfm_frag_ttl: 60 +kern.skywalk.flowswitch.ipfm_timeout_tcall_ival: 1 +kern.skywalk.flowswitch.flow_route_expire: 600 +kern.skywalk.flowswitch.en4.ipfm.frag_limit: 448 +kern.skywalk.flowswitch.en4.ipfm.frag_count: 0 +kern.skywalk.flowswitch.en4.ipfm.queue_limit: 224 +kern.skywalk.flowswitch.en4.ipfm.queue_count: 0 +kern.skywalk.flowswitch.en5.ipfm.frag_limit: 448 +kern.skywalk.flowswitch.en5.ipfm.frag_count: 0 +kern.skywalk.flowswitch.en5.ipfm.queue_limit: 224 +kern.skywalk.flowswitch.en5.ipfm.queue_count: 0 +kern.skywalk.flowswitch.en6.ipfm.frag_limit: 448 +kern.skywalk.flowswitch.en6.ipfm.frag_count: 0 +kern.skywalk.flowswitch.en6.ipfm.queue_limit: 224 +kern.skywalk.flowswitch.en6.ipfm.queue_count: 0 +kern.skywalk.flowswitch.en0.ipfm.frag_limit: 4544 +kern.skywalk.flowswitch.en0.ipfm.frag_count: 0 +kern.skywalk.flowswitch.en0.ipfm.queue_limit: 1024 +kern.skywalk.flowswitch.en0.ipfm.queue_count: 0 +kern.skywalk.flowswitch.ap1.ipfm.frag_limit: 4544 +kern.skywalk.flowswitch.ap1.ipfm.frag_count: 0 +kern.skywalk.flowswitch.ap1.ipfm.queue_limit: 1024 +kern.skywalk.flowswitch.ap1.ipfm.queue_count: 0 +kern.skywalk.flowswitch.awdl0.ipfm.frag_limit: 4544 +kern.skywalk.flowswitch.awdl0.ipfm.frag_count: 0 +kern.skywalk.flowswitch.awdl0.ipfm.queue_limit: 1024 +kern.skywalk.flowswitch.awdl0.ipfm.queue_count: 0 +kern.skywalk.ring_stat_enable: 0 +kern.hv.supported: 1 +kern.hv.max_address_spaces: 256 +kern.hv.ipa_size_16k: 4398046511104 +kern.hv.ipa_size_4k: 549755813888 +kern.entropy.analysis.supported: 0 +kern.entropy.filter.total_sample_count: 913452797 +kern.entropy.filter.accepted_sample_count: 909654554 +kern.entropy.filter.rejected_sample_count: 3798243 +kern.entropy.health.adaptive_proportion_test.reset_count: 1776693 +kern.entropy.health.adaptive_proportion_test.failure_count: 0 +kern.entropy.health.adaptive_proportion_test.max_observation_count: 16 +kern.entropy.health.repetition_count_test.reset_count: 906031160 +kern.entropy.health.repetition_count_test.failure_count: 0 +kern.entropy.health.repetition_count_test.max_observation_count: 5 +kern.entropy.health.startup_done: 1 +kern.eventhandler.debug: 0 +kern.dtrace.err_verbose: 0 +kern.dtrace.buffer_memory_maxsize: 11453246122 +kern.dtrace.buffer_memory_inuse: 0 +kern.dtrace.difo_maxsize: 262144 +kern.dtrace.dof_maxsize: 524288 +kern.dtrace.global_maxsize: 16384 +kern.dtrace.provide_private_probes: 1 +kern.dtrace.dof_mode: 1 +kern.dtrace.ignore_fbt_blacklist: 0 +kern.timer.longterm.threshold: 0 +kern.timer.longterm.scan_limit: 100000 +kern.timer.longterm.scan_interval: 100000 +kern.timer.longterm.qlen: 0 +kern.timer.longterm.scan_pauses: 0 +kern.timer.coalescing_enabled: 1 +kern.timer.deadline_tracking_bin_1: 48000 +kern.timer.deadline_tracking_bin_2: 120000 +kern.timer.scan_limit: 400000 +kern.timer.scan_interval: 40000 +kern.timer.scan_pauses: 0 +kern.timer.scan_postpones: 0 +kern.microstackshot.interrupt_sample_rate: 1 +kern.microstackshot.pmi_sample_period: 12000000000 +kern.microstackshot.pmi_sample_counter: 0 +kern.cpc.secure: 1 +kern.kdbg.debug: 0 +kern.kdbg.oldest_time: 0 +kern.monotonic.supported: 1 +kern.monotonic.pmis: 220350 0 +kern.monotonic.retrograde_updates: 0 0 +kern.monotonic.task_thread_counting: 1 +kern.proc_rsr_in_progress: 0 +kern.hv_vmm_present: 0 +kern.secure_kernel: 0 +kern.willuserspacereboot: 0 +kern.hibernatefile: /var/vm/sleepimage +kern.bootsignature: +kern.hibernatemode: 0 +kern.hibernategraphicsready: 0 +kern.hibernatewakenotification: 0 +kern.hibernatelockscreenready: 0 +kern.hibernatehidready: 0 +kern.hibernatecount: 1 +kern.nbuf: 16384 +kern.maxnbuf: 16384 +kern.flush_cache_on_write: 0 +kern.wq_stalled_window_usecs: 200 +kern.wq_reduce_pool_window_usecs: 5000000 +kern.wq_max_timer_interval_usecs: 50000 +kern.wq_max_threads: 512 +kern.wq_max_constrained_threads: 64 +kern.ds_supgroups_supported: 1 +kern.sugid_scripts: 0 +kern.libmalloc_experiments: 0 +kern.initproc_spawned: 1 +kern.uuid: 52F71D8C-FEDF-3A4B-9B6B-8463C5251B20 +kern.system_version_compat: 0 +kern.osproductversioncompat: 10.16 +kern.osproductversion: 14.4.1 +kern.osreleasetype: User +kern.iossupportversion: 17.4 +kern.bootargs: +kern.kernelcacheuuid: 9EC7FBEF-D78C-A9C9-BCFB-F3637BA3DB70 +kern.filesetuuid: 9EC7FBEF-D78C-A9C9-BCFB-F3637BA3DB70 +kern.num_files: 7426 +kern.num_vnodes: 263168 +kern.num_tasks: 8192 +kern.num_threads: 40960 +kern.num_taskthreads: 8192 +kern.num_recycledvnodes: 9269571 +kern.free_vnodes: 180980 +kern.namecache_disabled: 0 +kern.sched_enable_smt: 1 +kern.sched_allow_NO_SMT_threads: 1 +kern.sched_rt_avoid_cpu0: 0 +kern.sched_recommended_cores: 1023 +kern.suspend_cluster_powerdown: 0 +kern.preheat_max_bytes: 1048576 +kern.preheat_min_bytes: 32768 +kern.speculative_prefetch_max: 201326592 +kern.speculative_prefetch_max_iosize: 524288 +kern.vm_page_free_target: 4000 +kern.vm_page_free_min: 3500 +kern.vm_page_free_reserved: 906 +kern.vm_page_speculative_percentage: 5 +kern.vm_page_speculative_q_age_ms: 500 +kern.vm_max_delayed_work_limit: 32 +kern.vm_max_batch: 256 +kern.bootsessionuuid: 0E097B96-CB5F-4347-983D-87976C3FA3CB +kern.bootuuid: AD5CC5E0-7806-43FD-85E9-B90F48993E3B +kern.apfsprebootuuid: AD5CC5E0-7806-43FD-85E9-B90F48993E3B +kern.bootobjectspath: /AD5CC5E0-7806-43FD-85E9-B90F48993E3B/boot/849A93311AB61505E209255680056E462011B9BAFA091D39927FE5EAD74CD24C2DD04FDB089739324E875A6941997BDF +kern.drivercorefile: /private/var/dextcores/%N.core +kern.vfsnspace: 0 +kern.singleuser: 0 +kern.minimalboot: 0 +kern.affinity_sets_enabled: 1 +kern.affinity_sets_mapping: 1 +kern.slide: 1 +kern.ipc_voucher_trace_contents: 0 +kern.stack_size: 16384 +kern.stack_depth_max: 0 +kern.kern_feature_overrides: 0 +kern.ipc_portbt: 0 +kern.ikm_signature_failures: 0 +kern.ikm_signature_failure_id: 0 +kern.sched: edge +kern.cpu_checkin_interval: 5000 +kern.precise_user_kernel_time: 1 +kern.pervasive_energy: 1 +kern.timer_coalesce_bg_scale: -5 +kern.timer_resort_threshold_ns: 50000000 +kern.timer_coalesce_bg_ns_max: 100000000 +kern.timer_coalesce_kt_scale: 3 +kern.timer_coalesce_kt_ns_max: 1000000 +kern.timer_coalesce_fp_scale: 3 +kern.timer_coalesce_fp_ns_max: 1000000 +kern.timer_coalesce_ts_scale: 3 +kern.timer_coalesce_ts_ns_max: 1000000 +kern.timer_coalesce_tier0_scale: 3 +kern.timer_coalesce_tier0_ns_max: 1000000 +kern.timer_coalesce_tier1_scale: 2 +kern.timer_coalesce_tier1_ns_max: 5000000 +kern.timer_coalesce_tier2_scale: 1 +kern.timer_coalesce_tier2_ns_max: 20000000 +kern.timer_coalesce_tier3_scale: -2 +kern.timer_coalesce_tier3_ns_max: 75000000 +kern.timer_coalesce_tier4_scale: 3 +kern.timer_coalesce_tier4_ns_max: 1000000 +kern.timer_coalesce_tier5_scale: 3 +kern.timer_coalesce_tier5_ns_max: 1000000 +kern.hv_support: 1 +kern.hv_disable: 0 +kern.darkboot: 0 +kern.link_time_optimized: 1 +kern.thread_groups_supported: 1 +kern.direct_handoff: 1 +kern.num_static_scalable_counters: 54 +kern.trial_treatment_id: +kern.trial_experiment_id: +kern.trial_deployment_id: -1 +kern.page_protection_type: 1 +kern.exclaves_status: 255 +kern.exclaves_boot_stage: -1 +kern.memorystatus_sysprocs_idle_delay_time: 10 +kern.memorystatus_apps_idle_delay_time: 10 +kern.jetsam_aging_policy: 2 +kern.memorystatus_level: 71 +kern.memorystatus_purge_on_warning: 2 +kern.memorystatus_purge_on_urgent: 5 +kern.memorystatus_purge_on_critical: 8 +kern.vm_pressure_level_transition_threshold: 30 +kern.stackshot_estimate_adj: 75 +kern.stackshot_busy_enabled: 1 +kern.msgbuf: 131072 +kern.task_exc_guard_default: 153 +kern.ulock_adaptive_spin_usecs: 20 +kern.progressmeterenable: 0 +kern.progressmeter: 241 +kern.consoleoptions: 0 +kern.wakereason: NUB.SPMISw3IRQ nub-spmi0.0x02 rtc +kern.shutdownreason: sgpio,sgpio_shutdown wdog,reset_in1 ap_restart +kern.aotmodebits: 0 +kern.aotmode: 0 +kern.pmtimeout: 0 +kern.pmcallouttimer: 2000 +kern.iokittest: 0 +kern.sleeptime: { sec = 1715102007, usec = 323802 } Tue May 7 10:13:27 2024 +kern.waketime: { sec = 1715103000, usec = 232927 } Tue May 7 10:30:00 2024 +kern.wake_abs_time: 29357138519262 +kern.sleep_abs_time: 29357136488993 +kern.useractive_abs_time: 29357488384012 +kern.userinactive_abs_time: 0 +kern.willshutdown: 0 +kern.prng.scheduled_reseed_count: 47300 +kern.prng.scheduled_reseed_max_sample_count: 39256851 +kern.prng.entropy_max_sample_count: 8724 +kern.prng.pool_0.sample_count: 0 +kern.prng.pool_0.drain_count: 47300 +kern.prng.pool_0.max_sample_count: 5815 +kern.prng.pool_1.sample_count: 582 +kern.prng.pool_1.drain_count: 23650 +kern.prng.pool_1.max_sample_count: 7656 +kern.prng.pool_2.sample_count: 584 +kern.prng.pool_2.drain_count: 11825 +kern.prng.pool_2.max_sample_count: 10200 +kern.prng.pool_3.sample_count: 2889 +kern.prng.pool_3.drain_count: 5912 +kern.prng.pool_3.max_sample_count: 11985 +kern.prng.pool_4.sample_count: 2906 +kern.prng.pool_4.drain_count: 2956 +kern.prng.pool_4.max_sample_count: 22075 +kern.prng.pool_5.sample_count: 2899 +kern.prng.pool_5.drain_count: 1478 +kern.prng.pool_5.max_sample_count: 44771 +kern.prng.pool_6.sample_count: 2904 +kern.prng.pool_6.drain_count: 739 +kern.prng.pool_6.max_sample_count: 73490 +kern.prng.pool_7.sample_count: 40173 +kern.prng.pool_7.drain_count: 369 +kern.prng.pool_7.max_sample_count: 117491 +kern.prng.pool_8.sample_count: 114905 +kern.prng.pool_8.drain_count: 184 +kern.prng.pool_8.max_sample_count: 205185 +kern.prng.pool_9.sample_count: 115059 +kern.prng.pool_9.drain_count: 92 +kern.prng.pool_9.max_sample_count: 393776 +kern.prng.pool_10.sample_count: 114814 +kern.prng.pool_10.drain_count: 46 +kern.prng.pool_10.max_sample_count: 773267 +kern.prng.pool_11.sample_count: 114823 +kern.prng.pool_11.drain_count: 23 +kern.prng.pool_11.max_sample_count: 1439555 +kern.prng.pool_12.sample_count: 1321233 +kern.prng.pool_12.drain_count: 11 +kern.prng.pool_12.max_sample_count: 2793841 +kern.prng.pool_13.sample_count: 3761352 +kern.prng.pool_13.drain_count: 5 +kern.prng.pool_13.max_sample_count: 5217030 +kern.prng.pool_14.sample_count: 8608260 +kern.prng.pool_14.drain_count: 2 +kern.prng.pool_14.max_sample_count: 10073748 +kern.prng.pool_15.sample_count: 8620747 +kern.prng.pool_15.drain_count: 1 +kern.prng.pool_15.max_sample_count: 19802937 +kern.prng.pool_16.sample_count: 28400386 +kern.prng.pool_16.drain_count: 0 +kern.prng.pool_16.max_sample_count: 28400386 +kern.prng.pool_17.sample_count: 28401151 +kern.prng.pool_17.drain_count: 0 +kern.prng.pool_17.max_sample_count: 28401151 +kern.prng.pool_18.sample_count: 28391662 +kern.prng.pool_18.drain_count: 0 +kern.prng.pool_18.max_sample_count: 28391662 +kern.prng.pool_19.sample_count: 28400035 +kern.prng.pool_19.drain_count: 0 +kern.prng.pool_19.max_sample_count: 28400035 +kern.prng.pool_20.sample_count: 28415491 +kern.prng.pool_20.drain_count: 0 +kern.prng.pool_20.max_sample_count: 28415491 +kern.prng.pool_21.sample_count: 28405110 +kern.prng.pool_21.drain_count: 0 +kern.prng.pool_21.max_sample_count: 28405110 +kern.prng.pool_22.sample_count: 28419825 +kern.prng.pool_22.drain_count: 0 +kern.prng.pool_22.max_sample_count: 28419825 +kern.prng.pool_23.sample_count: 28390382 +kern.prng.pool_23.drain_count: 0 +kern.prng.pool_23.max_sample_count: 28390382 +kern.prng.pool_24.sample_count: 28384722 +kern.prng.pool_24.drain_count: 0 +kern.prng.pool_24.max_sample_count: 28384722 +kern.prng.pool_25.sample_count: 28399464 +kern.prng.pool_25.drain_count: 0 +kern.prng.pool_25.max_sample_count: 28399464 +kern.prng.pool_26.sample_count: 28428422 +kern.prng.pool_26.drain_count: 0 +kern.prng.pool_26.max_sample_count: 28428422 +kern.prng.pool_27.sample_count: 28412867 +kern.prng.pool_27.drain_count: 0 +kern.prng.pool_27.max_sample_count: 28412867 +kern.prng.pool_28.sample_count: 28434800 +kern.prng.pool_28.drain_count: 0 +kern.prng.pool_28.max_sample_count: 28434800 +kern.prng.pool_29.sample_count: 28415673 +kern.prng.pool_29.drain_count: 0 +kern.prng.pool_29.max_sample_count: 28415673 +kern.prng.pool_30.sample_count: 28400623 +kern.prng.pool_30.drain_count: 0 +kern.prng.pool_30.max_sample_count: 28400623 +kern.prng.pool_31.sample_count: 28443855 +kern.prng.pool_31.drain_count: 0 +kern.prng.pool_31.max_sample_count: 28443855 +kern.crypto.sha1: SHA1_VNG_ARM +kern.crypto.sha256: SHA256_VNG_ARM +kern.crypto.sha384: SHA384_VNG_ARM +kern.crypto.sha512: SHA512_VNG_ARM +kern.crypto.aes.ecb.encrypt: AES_ECB_ARM +kern.crypto.aes.ecb.decrypt: AES_ECB_ARM +kern.crypto.aes.xts.encrypt: AES_XTS_ARM +kern.crypto.aes.xts.decrypt: AES_XTS_ARM +kern.amfm_log_ctl: 0 +kern.monotonicclock: 35438929 +kern.monotonicclock_usecs: 35438929211029 29423694673305 +kern.monotonicclock_rate_usecs: 30 +kern.monotoniclock_offset_usecs: 1679666844178344 +kern.pthread_mutex_default_policy: 0 +hw.model: MacBookPro18,1 diff --git a/test/units/module_utils/facts/hardware/fixtures/vm_stat_darwin.txt b/test/units/module_utils/facts/hardware/fixtures/vm_stat_darwin.txt new file mode 100644 index 00000000000..0256d5d5e0b --- /dev/null +++ b/test/units/module_utils/facts/hardware/fixtures/vm_stat_darwin.txt @@ -0,0 +1,23 @@ +Mach Virtual Memory Statistics: (page size of 16384 bytes) +Pages free: 6472. +Pages active: 730051. +Pages inactive: 710941. +Pages speculative: 18210. +Pages throttled: 0. +Pages wired down: 165932. +Pages purgeable: 19224. +"Translation faults": 2500287752. +Pages copy-on-write: 62978099. +Pages zero filled: 1121833567. +Pages reactivated: 11023181. +Pages purged: 20818028. +File-backed pages: 546992. +Anonymous pages: 912210. +Pages stored in compressor: 1414412. +Pages occupied by compressor: 424276. +Decompressions: 4833976. +Compressions: 8360458. +Pageins: 21634062. +Pageouts: 135974. +Swapins: 385871. +Swapouts: 437651. diff --git a/test/units/module_utils/facts/hardware/test_darwin_facts.py b/test/units/module_utils/facts/hardware/test_darwin_facts.py new file mode 100644 index 00000000000..432848b1c23 --- /dev/null +++ b/test/units/module_utils/facts/hardware/test_darwin_facts.py @@ -0,0 +1,83 @@ +# Copyright: Contributors to the Ansible project +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import annotations + +import pathlib + +from ansible.module_utils.facts.hardware import darwin +from ansible.module_utils.facts.sysctl import get_sysctl +import pytest + + +class TestDarwinHardwareFacts: + def _get_mock_sysctl_data(self): + fixtures = pathlib.Path(__file__).parent / "fixtures" + return (fixtures / "sysctl_darwin.txt").read_text() + + @pytest.fixture() + def mocked_module(self, mocker, request): + request.cls.module = mocker.MagicMock() + request.cls.module.get_bin_path.return_value = "/usr/sbin/sysctl" + yield request.cls.module + + def test_get_mac_facts(self, mocked_module): + mocked_module.run_command.return_value = (0, self._get_mock_sysctl_data(), "") + darwin_hardware = darwin.DarwinHardware(mocked_module) + darwin_hardware.sysctl = get_sysctl( + mocked_module, ["hw", "machdep", "kern", "hw.model"] + ) + + mac_facts = darwin_hardware.get_mac_facts() + expected_mac_facts = { + "model": "MacBookPro18,1", + "product_name": "MacBookPro18,1", + "osversion": "23E224", + "osrevision": "199506", + } + assert mac_facts == expected_mac_facts + + def test_get_cpu_facts(self, mocked_module): + mocked_module.run_command.return_value = (0, self._get_mock_sysctl_data(), "") + darwin_hardware = darwin.DarwinHardware(mocked_module) + darwin_hardware.sysctl = get_sysctl( + mocked_module, ["hw", "machdep", "kern", "hw.model"] + ) + + cpu_facts = darwin_hardware.get_cpu_facts() + expected_cpu_facts = { + "processor": "Apple M1 Pro", + "processor_cores": "10", + "processor_vcpus": "10", + } + assert cpu_facts == expected_cpu_facts + + def test_get_memory_facts(self, mocked_module): + fixtures = pathlib.Path(__file__).parent / "fixtures" + mocked_module.get_bin_path.side_effect = [ + "/usr/sbin/sysctl", + "/usr/bin/vm_stat", + ] + mocked_vm_stat = (fixtures / "vm_stat_darwin.txt").read_text() + mocked_module.run_command.side_effect = [ + (0, self._get_mock_sysctl_data(), ""), + (0, mocked_vm_stat, ""), + ] + darwin_hardware = darwin.DarwinHardware(mocked_module) + darwin_hardware.sysctl = get_sysctl( + mocked_module, ["hw", "machdep", "kern", "hw.model"] + ) + + memory_facts = darwin_hardware.get_memory_facts() + expected_memory_facts = {"memtotal_mb": 32768, "memfree_mb": 26491} + assert memory_facts == expected_memory_facts + + def test_get_uptime_facts(self, mocked_module): + darwin_hardware = darwin.DarwinHardware(mocked_module) + mocked_module.run_command.return_value = ( + 0, + b"\xc0\xa0\x05f\x00\x00\x00\x00\xac-\x05\x00\x00\x00\x00\x00", + "", + ) + uptime_facts = darwin_hardware.get_uptime_facts() + assert "uptime_seconds" in uptime_facts