Subject: | t/module.t fails with three errors ( due to non-existent /sys/ nodes ) |
not ok 9 - open with undefined name # TODO will fail in future
# Failed (TODO) test 'open with undefined name'
# at t/module.t line 72.
ok 10 - An object of class 'Linux::Sysfs::Module' isa 'Linux::Sysfs::Module'
not ok 11 - undef isa 'Linux::Sysfs::Attribute'
# Failed test 'undef isa 'Linux::Sysfs::Attribute''
# at t/module.t line 82.
# undef isn't defined
ok 20 - An object of class 'Linux::Sysfs::Module' isa 'Linux::Sysfs::Module'
not ok 21 - get_sections
# Failed test 'get_sections'
# at t/module.t line 145.
ok 30 - An object of class 'Linux::Sysfs::Module' isa 'Linux::Sysfs::Module'
not ok 31 - undef isa 'Linux::Sysfs::Attribute'
# Failed test 'undef isa 'Linux::Sysfs::Attribute''
# at t/module.t line 204.
# undef isn't defined
---
t/module.t line 82
my $module = Linux::Sysfs::Module->open_path($val_mod_path);
isa_ok( $module, 'Linux::Sysfs::Module' );
my $attr = $module->get_attr($val_mod_attr_name);
isa_ok( $attr, 'Linux::Sysfs::Attribute' ); #TODO: errno
$val_mod_path is "/sys/module/vt"
$val_mod_attr_name is "refcnt"
But there is no child of sys/module/vt by that name, so $attr is undef.
ls -FRah /sys/module/vt/
/sys/module/vt/:
./ ../ parameters/ uevent
/sys/module/vt/parameters:
./ color default_blu default_red global_cursor_default underline
../ cur_default default_grn default_utf8 italic
Though lots of other modules have refcnts
ls -FRah /sys/module/*/refcnt
/sys/module/binfmt_misc/refcnt /sys/module/snd_hda_codec/refcnt /sys/module/snd_timer/refcnt
/sys/module/cfg80211/refcnt /sys/module/snd_hda_codec_generic/refcnt /sys/module/uas/refcnt
/sys/module/intel_rapl/refcnt /sys/module/snd_hda_codec_realtek/refcnt /sys/module/usb_storage/refcnt
/sys/module/iosf_mbi/refcnt /sys/module/snd_hda_core/refcnt /sys/module/xhci_hcd/refcnt
/sys/module/nvidia/refcnt /sys/module/snd_hda_intel/refcnt /sys/module/xhci_pci/refcnt
/sys/module/nvidia_modeset/refcnt /sys/module/snd_hwdep/refcnt /sys/module/zram/refcnt
/sys/module/sch_fq_codel/refcnt /sys/module/snd_pcm/refcnt
---
t/module.t line 145
$val_mod_path is "/sys/module/vt".
my $module = Linux::Sysfs::Module->open_path($val_mod_path);
isa_ok( $module, 'Linux::Sysfs::Module' );
my @sects = $module->get_sections;
ok( scalar @sects > 0, 'get_sections' );
"/sys/module/vt" doesn't have any children called "sections" ( See earlier dump ), but other modules do:
echo /sys/module/*/sections | tr " " "\n"
/sys/module/binfmt_misc/sections
/sys/module/cfg80211/sections
/sys/module/intel_rapl/sections
/sys/module/iosf_mbi/sections
/sys/module/nvidia/sections
/sys/module/nvidia_modeset/sections
/sys/module/sch_fq_codel/sections
/sys/module/snd_hda_codec/sections
/sys/module/snd_hda_codec_generic/sections
/sys/module/snd_hda_codec_realtek/sections
/sys/module/snd_hda_core/sections
/sys/module/snd_hda_intel/sections
/sys/module/snd_hwdep/sections
/sys/module/snd_pcm/sections
/sys/module/snd_timer/sections
/sys/module/uas/sections
/sys/module/usb_storage/sections
/sys/module/xhci_hcd/sections
/sys/module/xhci_pci/sections
/sys/module/zram/sections
---
# at t/module.t line 204.
my $module = Linux::Sysfs::Module->open_path($val_mod_path);
isa_ok( $module, 'Linux::Sysfs::Module' );
my $sect = $module->get_section($val_mod_section);
isa_ok( $sect, 'Linux::Sysfs::Attribute' ); #TODO: errno
This looks like the same issue with the previous error, $val_mod_path is of course the vt dir without sections.
$val_mod_section is "__versions", and literally no modules have that.
find /sys/module/ | grep __versions # no output
And as luck would have it, both "refcnt" and "__version" are values hardcoded in 01-config.t and not autodiscovered =)
All non-todoised issues mentioned here are easily fixable by me adjusting 01-config.t
@39
-$fh->print(" val_mod_section => '__version',\n");
+$fh->print(" val_mod_section => '" . find_section_name() . "',\n");
@212
- return (find_device_paths($path, sub { -d $_ && -d "$_/parameters" }))[0];
+ return (find_device_paths($path, sub { -d $_ && -d "$_/parameters" && -d "$_/sections" }))[0];
@229
+sub find_section_name {
+ my $path = find_mod_path();
+ $path .= '/sections';
+ return (find_device_paths($path, sub { -f $_ && -r $_ }))[0]->[1];
+}