Devel::Cover - only subroutine coverage - perl

I want only subroutine coverage in my perl file.
So in main file I inserted the following statement:
mainfile.pl
use Devel::Cover::Subroutine;
If I run mainfile.pl it shows the error:
Devel::Cover: Writing coverage database to /home/devel1/Devel-Cover-0.78/examples1/cover_db/runs/1319109459.10082.56199
Can't find digest for mainfile.pl at /opt/perl_32/lib/site_perl/5.8.8/IA64.ARCHREV_0-thread-multi/Devel/Cover/DB/Structure.pm line 282.
Devel::Cover: Can't find digest for mainfile.pl
--------------------------------------------------------------- ------ ------
File sub total
--------------------------------------------------------------- ------ ------
Total n/a n/a
--------------------------------------------------------------- ------ ------
How can I resolve this error?
But when I use only use Devel::Cover; it works properly.

Devel::Cover::Subroutine is an internal module used by Devel::Cover to represent subroutine coverage data. You should not use this directly. Instead, you should use Devel::Cover with the -subs_only option.

Related

Terraform - Unable to intiate terraform

I am trying to initiate terraform on visual studio code - insiders.
Points:
I have downloaded the terraform executable file and i am able to launch it on command prompt.
When to run the command terraform init command on visual studio code - insider i get the following error message. Please find the error message below and also the location of the terraform index.
PS F:\terraform> terraform.exe init
Fatal error in launcher: Unable to create process using
'"c:\python38\python.exe" "c:\Python38\Scripts\terraform.exe" init':
the system cannot find the file specified.
PS F:\terraform> ls
Directory: F:\terraform
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 18-09-2021 22:21 .terraform
-a--- 18-09-2021 22:33 1035 .terraform.lock.hcl
-a--- 18-09-2021 22:48 219 main.tf
-a--- 18-09-2021 22:48 41 provider.tf
----- 18-09-2021 23:44 80807800 terraform.exe
I have tried to run the same code ps core 6 i get the above error message in the command prompt it works perfectly.
I really your inputs on what can be done.
Please help
Regards
Sudlo
Here the steps which I performed to fix the issue.
I launched PS core prompt went into the directory in my case
f:\terrform and passed the command terraform init I got the same error message.
went into the location C:\Python38\Scripts and located the terraform executable file deleted the file and copied it again and performed initialization command. This time there was no error.
Hope this helps

Another clarification on Azure DevOps Pipeline: -d--- and -a--- mode

I do a Download of My Build.SourceDirectories and what is get is of this format:
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 3/11/2021 8:51 PM ReleaseNoteScripts
d----- 3/11/2021 8:51 PM Flow_Tools_CodeGen_PS
-a---- 3/11/2021 8:51 PM 1319 README.md
I am using this Directory to run a powershell script to upload it in SharePoint. I am able to do it for files with mode d--- but it fails for file with mode -a--- . In this case, It gives me error as README.MD file is not found. What is -a--- mode and I am ok with README.md file not uploaded in SharePoint. How should I remove that my PowerShell Script don't take this file
Mode is a misnomer. It's really Attributes:
d is a directory, a is the archive bit set, r is read-only, s is system, h is hidden, etc.
Why this fails on the a entry suggests that your task to upload is only looking at directories and not files at that folder level. Would need to see more to say more.

How to add/replace psobject

I am trying to write a script about the state of the server hardware
The following functions have been completed.
Get-SummaryStatus.ps1
Get-Memory.ps1
Get-PowerSupply.ps1
Get-Proecssor.ps1
Get-Fanstatus.ps1
Get-SummaryStatus.ps1 output is
Server ServerStatus
------ ------------
AAA {System.Collections.Hashtable}
$report.server output is
AAA
$report.serverstatus output is
Name Value
---- -----
MemoryStatus OK
PowerStatus OK
ProcessorStatus OK
Fanstatus OK
Get-Memory.ps1 output is
Server MemoryStatus
------ ------------
AAA {System.Collections.Hashtable, System.Collections.Hashtable}
$report.server output is
AAA
$report.MemoryStatus output is
Name Value
---- -----
MemoryID 1
MemoryStatus OK
MemoryID 2
MemoryStatus OK
Get-PowerSupply.ps1 output is
Server MemoryStatus
------ ------------
AAA {System.Collections.Hashtable, System.Collections.Hashtable}
$report.server output is
AAA
$report.PowerStatus output is
Name Value
---- -----
PowerID 1
PowerStatus OK
PowerID 2
PowerStatus OK
Get-Proecssor.ps1 output Similar to the three above
Get-Fanstatus.ps1 output Similar to the three above
Duo to I have more than 1000 services that need to be monitored, So I want to make the following steps to improve efficiency.
I created a new main function(ServerHealthCheck) and call all sub-founcitons(summary,memory,power...) to main function. (completed)
If the summary state are OK, and then output summarystatus. (completed.)
If Summary memory status is failed. and then will call Get-Memory.ps1 to find which memory is bad.(completed)
If Summary power status is failed. and then will call Get-powersupply.ps1 to find which powersupply is bad.(completed.)
if One of the hardware was failed , I want to rearrange a new object.
my question is How to add/replace object to get expected output? thanks in advance.
Expected output(if summary memory status is failed):
Server ServerStatus
------ ------------
AAA {System.Collections.Hashtable}
$report.server output is
AAA
$report.serverstatus output is
Name Value
---- -----
MemoryID 1
MemoryStatus failed
PowerStatus OK
ProcessorStatus OK
Fanstatus OK

vscode install failed with "install failed error" on windows7

I try to install vscode on windows7 and get "install failed error", no detailed information, is there someone get the same error? It is crazy that vscode can not be installed on windows.
Use something like 7Zip to extract the archived files to a VSCodeSetup folder, with the resulting files:
Mode LastWriteTime Length Name
---- ------------- ------ ----
----- 4/22/2015 8:28 AM 140782 background.gif
----- 4/27/2015 6:22 PM 60255967 Code-0.1.0-full.nupkg
----- 4/27/2015 6:22 PM 74 RELEASES
-a--- 4/30/2015 9:25 AM 1911 SquirrelSetup.log
----- 4/24/2015 11:12 AM 1492992 Update.exe
Then open PowerShell (a CMD window would also work). I cd'd into the VSCodeSetup folder and ran the following command:
PS>.\Update.exe --install=.
(You may need to run PS or the CMD window as Administrator)
Referenced post: VSCode Installation Failed - Failed to extract installer

Devel::Cover merging coverage data for Perl scripts and modules

I'm having issues merging data for coverage on Perl scripts and modules.. Running Devel::Cover individually works just fine, but when I try to combine the data I lose statistics for just the Perl script not the module..
Let me explain..
I have a directory tree that looks like so..
Code_Coverage_Test
|
|---->lib
|
|---->t
|
Inside the root Code_Coverage_Test directory I have the Build.pl file that builds the tests for the module and script that kickoff two other scripts that automate some commands for me..
./Build.pl
#!/usr/bin/perl -w
use strict;
use Module::Build;
my $buildTests = Module::Build->new(
module_name => 'testPMCoverage',
license => 'perl',
dist_abstract => 'Perl .pm Test Code Coverage',
dist_author => 'me#myEmail.com',
build_requires => {
'Test::More' => '0.10',
},
);
$buildTests->create_build_script();
./startTests.sh
#!/bin/sh
cd t
./doPMtest.sh
./doPLtest.sh
cd ../
perl Build testcover
Inside the lib dir I have the files I'm trying to run Code coverage on..
lib/testPLCoverage.pl
#!/usr/bin/perl -w
use strict;
print "Ok!";
lib/testPMCoverage.pm
use strict;
use warnings;
package testPMCoverage;
sub hello {
return "Hello";
}
sub bye {
return "Bye";
}
1;
In the t dir I have my .t test file for the module and 2 scripts that kickoff the tests for me.. Both of which are called by the startTests.sh in the root directory
t/testPMCoverage.t
#!/usr/bin/perl -w
use strict;
use Test::More;
require_ok( 'testPMCoverage' );
my $test = testPMCoverage::hello();
is($test, "Hello", "hello() test");
done_testing();
t/doPLtest.sh
#!/bin/sh
#Test 1
cd ../
cd lib
perl -MDevel::Cover=-db,../cover_db testPLCoverage.pl
t/doPMtest.sh
#!/bin/bash
cd ../
perl Build.pl
perl Build test
The issue I'm running into is that when the doPLtests.sh script runs, I get coverage data, no problem..
---------------------------- ------ ------ ------ ------ ------ ------ ------
File STMT Bran Cond Sub pod Time total
---------------------------- ------ ------ ------ ------ ------ ------ ------
testPLCoverage.pl 100.0 n/a n/a 100.0 n/a 100.0 100.0
Total 100.0 n/a n/a 100.0 n/a 100.0 100.0
---------------------------- ------ ------ ------ ------ ------ ------ ------
However, when the doPMtest.sh script finishes and the startTests.sh script initiates the Build testcover command I lose that data along the way and I get these messages ...
Reading database path/Code_Coverage_Tests/cover_db
Devel::Cover: Warning: can't open testPLCoverage.pl for MD5 digest: No such file or directory
Devel::Cover: Warning: can't locate structure for statement in testPLCoverage.pl
Devel::Cover: Warning: can't locate structure for subroutine in testPLCoverage.pl
Devel::Cover: Warning: can't locate structure for time in testPLCoverage.pl
..and somehow I lose the data
---------------------------- ------ ------ ------ ------ ------ ------ ------
File STMT Bran Cond Sub pod Time total
---------------------------- ------ ------ ------ ------ ------ ------ ------
blib/lib/testPMCoverage.pm 87.5 n/a n/a 75.0 0.0 100.0 71.4
testPLCoverage.pl n/a n/a n/a n/a n/a n/a n/a
Total 87.5 n/a n/a 75.0 0.0 100.0 71.4
---------------------------- ------ ------ ------ ------ ------ ------ ------
How can I combine the Perl module and Perl script tests to get valid code coverage in ONE file?
Perl doesn't store the full path to the files it uses. If it finds the file via a relative path then only the relative path is stored. You can see this in the paths perl shows in the warning and error messages from those files.
When Devel::Cover deals with files it uses the path given by perl. You can see this in the reports from Devel::Cover where you have testPLCoverage.pl and blib/lib/testPMCoverage.pm.
What this means for you in practice is that whenever you put coverage into a coverage DB you should ensure that you are doing it from the same directory, so that Devel::Cover can match and locate the files in the coverage DB.
I think this is the problem you are hitting.
My suggestion is that in t/doPLtest.sh you don't cd into lib. You can run something like:
perl -Mblib -MDevel::Cover=-db,../cover_db lib/testPLCoverage.pl
(As an aside, why is that file in lib?)
I think that would mean that Devel::Cover would be running from the project root in each case and so should allow it to match and find the files.