Attention is currently required from: Thomas Heijligen, Anastasia Klimchuk.
Evan Benn has uploaded this change for review. ( https://review.coreboot.org/c/flashrom/+/69539 )
Change subject: tests: Add unmock_io.c
......................................................................
tests: Add unmock_io.c
Add functions and a struct that defer the io functions mocked by
mock_io to the real implementations. This is to support code coverage.
BUG=None
BRANCH=None
TEST=None
Change-Id: I0817fce6ea0f53a4c127794a0d8246504675f805
Signed-off-by: Evan Benn <evanbenn(a)chromium.org>
---
M tests/meson.build
A tests/unmock_io.c
A tests/unmock_io.h
M tests/wraps.h
4 files changed, 104 insertions(+), 0 deletions(-)
git pull ssh://review.coreboot.org:29418/flashrom refs/changes/39/69539/1
diff --git a/tests/meson.build b/tests/meson.build
index 66adb92..36b2db2 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -31,6 +31,7 @@
'layout.c',
'chip.c',
'chip_wp.c',
+ 'unmock_io.c',
)
if not programmer.get('dummy').get('active')
diff --git a/tests/unmock_io.c b/tests/unmock_io.c
new file mode 100644
index 0000000..83892e5
--- /dev/null
+++ b/tests/unmock_io.c
@@ -0,0 +1,65 @@
+/*
+ * This file is part of the flashrom project.
+ *
+ * Copyright 2022 Google LLC
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+#include "io_mock.h"
+#include "wraps.h"
+
+#include "unmock_io.h"
+#include <string.h>
+
+static int unwrap_open(void *state, const char *pathname, int flags, mode_t mode)
+{
+ LOG_ME;
+ (void)state;
+ return __real_open(pathname, flags, mode);
+}
+
+static FILE *unwrap_fdopen(void *state, int fd, const char *mode)
+{
+ LOG_ME;
+ (void)state;
+ return __real_fdopen(fd, mode);
+}
+
+static size_t unwrap_fwrite(void *state, const void *ptr, size_t size, size_t nmemb, FILE *fp)
+{
+ LOG_ME;
+ (void)state;
+ return __real_fwrite(ptr, size, nmemb, fp);
+}
+
+// Mock ios that defer to the real io functions.
+// These exist so that code coverage can print to real files on disk.
+static const struct io_mock real_io = {
+ .iom_open = unwrap_open,
+ .iom_fwrite = unwrap_fwrite,
+ .iom_fdopen = unwrap_fdopen,
+};
+
+// Return 0 if string ends with suffix.
+static int check_suffix(const char *string, const char *suffix)
+{
+ int len_l = strlen(string);
+ int len_r = strlen(suffix);
+ if (len_l > len_r)
+ return strcmp(string + len_l - len_r, suffix);
+ return 1;
+}
+
+void maybe_unmock_io(const char* pathname) {
+
+ if (!check_suffix(pathname, ".gcda"))
+ io_mock_register(&real_io);
+}
diff --git a/tests/unmock_io.h b/tests/unmock_io.h
new file mode 100644
index 0000000..5d964c7
--- /dev/null
+++ b/tests/unmock_io.h
@@ -0,0 +1,18 @@
+/*
+ * This file is part of the flashrom project.
+ *
+ * Copyright 2022 Google LLC
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+// Detect file io that should not be mocked, for example code coverage writing
+// gcda files. Call io_mock_register with functions that defer to real io.
+void maybe_unmock_io(const char* pathname);
diff --git a/tests/wraps.h b/tests/wraps.h
index e224d79..92b0c42 100644
--- a/tests/wraps.h
+++ b/tests/wraps.h
@@ -29,6 +29,7 @@
void __wrap_sio_write(uint16_t port, uint8_t reg, uint8_t data);
uint8_t __wrap_sio_read(uint16_t port, uint8_t reg);
int __wrap_open(const char *pathname, int flags, ...);
+int __real_open(const char *pathname, int flags, ...);
int __wrap_open64(const char *pathname, int flags, ...);
int __wrap___open64_2(const char *pathname, int flags, ...);
int __wrap_ioctl(int fd, unsigned long int request, ...);
@@ -37,6 +38,7 @@
FILE *__wrap_fopen(const char *pathname, const char *mode);
FILE *__wrap_fopen64(const char *pathname, const char *mode);
FILE *__wrap_fdopen(int fd, const char *mode);
+FILE *__real_fdopen(int fd, const char *mode);
int __wrap_stat(const char *path, void *buf);
int __wrap_stat64(const char *path, void *buf);
int __wrap___xstat(const char *path, void *buf);
@@ -49,6 +51,7 @@
char *__wrap___fgets_chk(char *buf, int len, FILE *fp);
size_t __wrap_fread(void *ptr, size_t size, size_t nmemb, FILE *fp);
size_t __wrap_fwrite(const void *ptr, size_t size, size_t nmemb, FILE *fp);
+size_t __real_fwrite(const void *ptr, size_t size, size_t nmemb, FILE *fp);
int __wrap_fflush(FILE *fp);
int __wrap_fileno(FILE *fp);
int __wrap_fsync(int fd);
--
To view, visit https://review.coreboot.org/c/flashrom/+/69539
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings
Gerrit-Project: flashrom
Gerrit-Branch: master
Gerrit-Change-Id: I0817fce6ea0f53a4c127794a0d8246504675f805
Gerrit-Change-Number: 69539
Gerrit-PatchSet: 1
Gerrit-Owner: Evan Benn <evanbenn(a)google.com>
Gerrit-Reviewer: Anastasia Klimchuk <aklm(a)chromium.org>
Gerrit-Reviewer: Thomas Heijligen <src(a)posteo.de>
Gerrit-Attention: Thomas Heijligen <src(a)posteo.de>
Gerrit-Attention: Anastasia Klimchuk <aklm(a)chromium.org>
Gerrit-MessageType: newchange
Hello build bot (Jenkins), Thomas Heijligen, Anastasia Klimchuk,
I'd like you to reexamine a change. Please visit
https://review.coreboot.org/c/flashrom/+/69266
to look at the new patch set (#10).
Change subject: tests: Detect gcov file io and unmock io functions
......................................................................
tests: Detect gcov file io and unmock io functions
Code coverage writes data to disk, we need to unmock the file io at this
point so that the data is really written.
BUG=b:187647884
BRANCH=None
TEST=meson test
TEST=ninja coverage
Change-Id: If06053ecd78e886c8f7fc55813f4b5635be78c6b
Signed-off-by: Evan Benn <evanbenn(a)chromium.org>
---
M Documentation/building.md
M tests/tests.c
2 files changed, 32 insertions(+), 0 deletions(-)
git pull ssh://review.coreboot.org:29418/flashrom refs/changes/66/69266/10
--
To view, visit https://review.coreboot.org/c/flashrom/+/69266
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings
Gerrit-Project: flashrom
Gerrit-Branch: master
Gerrit-Change-Id: If06053ecd78e886c8f7fc55813f4b5635be78c6b
Gerrit-Change-Number: 69266
Gerrit-PatchSet: 10
Gerrit-Owner: Evan Benn <evanbenn(a)google.com>
Gerrit-Reviewer: Anastasia Klimchuk <aklm(a)chromium.org>
Gerrit-Reviewer: Thomas Heijligen <src(a)posteo.de>
Gerrit-Reviewer: build bot (Jenkins) <no-reply(a)coreboot.org>
Gerrit-MessageType: newpatchset
Attention is currently required from: Anastasia Klimchuk.
Hello Anastasia Klimchuk,
I'd like you to reexamine a change. Please visit
https://review.coreboot.org/c/flashrom/+/69538
to look at the new patch set (#3).
Change subject: tests: Add fwrite and fdopen to io_mock
......................................................................
tests: Add fwrite and fdopen to io_mock
BUG=None
BRANCH=None
TEST=None
Change-Id: I4dff96c264b3ada354538b434b2808fb66c7ef59
Signed-off-by: Evan Benn <evanbenn(a)chromium.org>
---
M tests/io_mock.h
M tests/tests.c
2 files changed, 20 insertions(+), 0 deletions(-)
git pull ssh://review.coreboot.org:29418/flashrom refs/changes/38/69538/3
--
To view, visit https://review.coreboot.org/c/flashrom/+/69538
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings
Gerrit-Project: flashrom
Gerrit-Branch: master
Gerrit-Change-Id: I4dff96c264b3ada354538b434b2808fb66c7ef59
Gerrit-Change-Number: 69538
Gerrit-PatchSet: 3
Gerrit-Owner: Evan Benn <evanbenn(a)google.com>
Gerrit-Reviewer: Anastasia Klimchuk <aklm(a)chromium.org>
Gerrit-Attention: Anastasia Klimchuk <aklm(a)chromium.org>
Gerrit-MessageType: newpatchset
Attention is currently required from: Anastasia Klimchuk.
Hello build bot (Jenkins), Angel Pons, Anastasia Klimchuk,
I'd like you to reexamine a change. Please visit
https://review.coreboot.org/c/flashrom/+/69263
to look at the new patch set (#7).
Change subject: tests: Mock the mode_t variant of open
......................................................................
tests: Mock the mode_t variant of open
open has a second form with a mode_t argument. When mocking without this
argument a caller trying to O_CREAT would have their mode_t argument
discarded and a random stack variable would be used instead.
BUG=b:187647884
BRANCH=None
TEST=meson test
Change-Id: I8c134e6d36a248d0f51985e389085a9e585fb83d
Signed-off-by: Evan Benn <evanbenn(a)chromium.org>
---
M tests/io_mock.h
M tests/tests.c
M tests/tests.h
M tests/wraps.h
4 files changed, 53 insertions(+), 17 deletions(-)
git pull ssh://review.coreboot.org:29418/flashrom refs/changes/63/69263/7
--
To view, visit https://review.coreboot.org/c/flashrom/+/69263
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings
Gerrit-Project: flashrom
Gerrit-Branch: master
Gerrit-Change-Id: I8c134e6d36a248d0f51985e389085a9e585fb83d
Gerrit-Change-Number: 69263
Gerrit-PatchSet: 7
Gerrit-Owner: Evan Benn <evanbenn(a)google.com>
Gerrit-Reviewer: Anastasia Klimchuk <aklm(a)chromium.org>
Gerrit-Reviewer: Angel Pons <th3fanbus(a)gmail.com>
Gerrit-Reviewer: build bot (Jenkins) <no-reply(a)coreboot.org>
Gerrit-Attention: Anastasia Klimchuk <aklm(a)chromium.org>
Gerrit-MessageType: newpatchset
Attention is currently required from: Anastasia Klimchuk.
Hello Anastasia Klimchuk,
I'd like you to reexamine a change. Please visit
https://review.coreboot.org/c/flashrom/+/69537
to look at the new patch set (#3).
Change subject: tests: Move test.h include
......................................................................
tests: Move test.h include
BUG=None
BRANCH=None
TEST=None
Change-Id: I8e0611c415c921f5b04b20270fb26e147fefd1b8
Signed-off-by: Evan Benn <evanbenn(a)chromium.org>
---
M tests/io_mock.c
M tests/io_mock.h
2 files changed, 16 insertions(+), 1 deletion(-)
git pull ssh://review.coreboot.org:29418/flashrom refs/changes/37/69537/3
--
To view, visit https://review.coreboot.org/c/flashrom/+/69537
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings
Gerrit-Project: flashrom
Gerrit-Branch: master
Gerrit-Change-Id: I8e0611c415c921f5b04b20270fb26e147fefd1b8
Gerrit-Change-Number: 69537
Gerrit-PatchSet: 3
Gerrit-Owner: Evan Benn <evanbenn(a)google.com>
Gerrit-Reviewer: Anastasia Klimchuk <aklm(a)chromium.org>
Gerrit-Attention: Anastasia Klimchuk <aklm(a)chromium.org>
Gerrit-MessageType: newpatchset
Attention is currently required from: Thomas Heijligen, Anastasia Klimchuk.
Evan Benn has posted comments on this change. ( https://review.coreboot.org/c/flashrom/+/69268 )
Change subject: tests: Add llvm-cov option and run target for code coverage
......................................................................
Patch Set 9:
(2 comments)
File meson.build:
https://review.coreboot.org/c/flashrom/+/69268/comment/bff36be2_eec15379
PS5, Line 534: if get_option('llvm_cov')
> Also need to check that tests feature is enabled
coverage can be used independently of unit tests
File meson_options.txt:
https://review.coreboot.org/c/flashrom/+/69268/comment/a0029578_f31bbc9d
PS5, Line 19: type : 'boolean'
> I think this should be a feature, like unit tests themselves. […]
Done
--
To view, visit https://review.coreboot.org/c/flashrom/+/69268
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings
Gerrit-Project: flashrom
Gerrit-Branch: master
Gerrit-Change-Id: Id6c73bff46e7b88d425956a80def97082b201f56
Gerrit-Change-Number: 69268
Gerrit-PatchSet: 9
Gerrit-Owner: Evan Benn <evanbenn(a)google.com>
Gerrit-Reviewer: Anastasia Klimchuk <aklm(a)chromium.org>
Gerrit-Reviewer: Thomas Heijligen <src(a)posteo.de>
Gerrit-Reviewer: build bot (Jenkins) <no-reply(a)coreboot.org>
Gerrit-Attention: Thomas Heijligen <src(a)posteo.de>
Gerrit-Attention: Anastasia Klimchuk <aklm(a)chromium.org>
Gerrit-Comment-Date: Mon, 14 Nov 2022 00:31:12 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Comment-In-Reply-To: Anastasia Klimchuk <aklm(a)chromium.org>
Gerrit-MessageType: comment
Attention is currently required from: Thomas Heijligen, Anastasia Klimchuk.
Evan Benn has posted comments on this change. ( https://review.coreboot.org/c/flashrom/+/69266 )
Change subject: tests: Detect gcov file io and unmock io functions
......................................................................
Patch Set 9:
(4 comments)
Commit Message:
https://review.coreboot.org/c/flashrom/+/69266/comment/4e6d1646_5a55fd70
PS6, Line 9: atexit
> missing space: atexit -> at exit
atexit is the name of the functionality through which code coverage writes data to disk. I will reword it.
File tests/io_mock.h:
https://review.coreboot.org/c/flashrom/+/69266/comment/82153d1d_f07d844b
PS6, Line 110: size_t (*iom_fwrite)(void *state, const void *buf, size_t size, size_t len, FILE *fp);
> Adding these (iom_fwrite and iom_fdopen) two can go into a separate patch, together with their calls […]
Done
File tests/tests.c:
https://review.coreboot.org/c/flashrom/+/69266/comment/f89ee844_f8e7ea91
PS6, Line 52: real_io_mock
> I think you can drop _mock, this is just real_io
Done
https://review.coreboot.org/c/flashrom/+/69266/comment/f34f982a_73674cc4
PS6, Line 29: static int unwrap_open(void *state, const char *pathname, int flags, mode_t mode)
: {
: LOG_ME;
: (void)state;
: return __real_open(pathname, flags, mode);
: }
:
: static FILE *unwrap_fdopen(void *state, int fd, const char *mode)
: {
: LOG_ME;
: (void)state;
: return __real_fdopen(fd, mode);
: }
:
: static size_t unwrap_fwrite(void *state, const void *ptr, size_t size, size_t nmemb, FILE *fp)
: {
: LOG_ME;
: (void)state;
: return __real_fwrite(ptr, size, nmemb, fp);
: }
:
: // Mock ios that defer to the real io functions.
: // These exist so that code coverage can print to real files on disk.
: static const struct io_mock real_io_mock = {
: .iom_open = unwrap_open,
: .iom_fwrite = unwrap_fwrite,
: .iom_fdopen = unwrap_fdopen,
: };
> Ideally, if this could go to a separate file for example `coverage. […]
named it unmock_io as its what it does, I think it will be useful for more than just coverage.
--
To view, visit https://review.coreboot.org/c/flashrom/+/69266
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings
Gerrit-Project: flashrom
Gerrit-Branch: master
Gerrit-Change-Id: If06053ecd78e886c8f7fc55813f4b5635be78c6b
Gerrit-Change-Number: 69266
Gerrit-PatchSet: 9
Gerrit-Owner: Evan Benn <evanbenn(a)google.com>
Gerrit-Reviewer: Anastasia Klimchuk <aklm(a)chromium.org>
Gerrit-Reviewer: Thomas Heijligen <src(a)posteo.de>
Gerrit-Reviewer: build bot (Jenkins) <no-reply(a)coreboot.org>
Gerrit-Attention: Thomas Heijligen <src(a)posteo.de>
Gerrit-Attention: Anastasia Klimchuk <aklm(a)chromium.org>
Gerrit-Comment-Date: Mon, 14 Nov 2022 00:30:29 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Comment-In-Reply-To: Anastasia Klimchuk <aklm(a)chromium.org>
Gerrit-MessageType: comment
Attention is currently required from: Evan Benn.
Hello build bot (Jenkins), Anastasia Klimchuk,
I'd like you to reexamine a change. Please visit
https://review.coreboot.org/c/flashrom/+/69267
to look at the new patch set (#9).
Change subject: tests: Detect llvm coverage file io and unmock io functions
......................................................................
tests: Detect llvm coverage file io and unmock io functions
Code coverage writes data to disk, we need to unmock the file io at this
point so that the data is really written.
BUG=b:187647884
BRANCH=None
TEST=llvm-profdata merge -sparse default.profraw -o default.profdata
TEST=llvm-cov show ./flashrom_unit_tests
-instr-profile=default.profdata --format=html --output-dir=.
Change-Id: I21cc1d631e92fa19006b967e85676f108e80b307
Signed-off-by: Evan Benn <evanbenn(a)chromium.org>
---
M Documentation/building.md
M tests/tests.c
M tests/unmock_io.c
M tests/wraps.h
4 files changed, 52 insertions(+), 1 deletion(-)
git pull ssh://review.coreboot.org:29418/flashrom refs/changes/67/69267/9
--
To view, visit https://review.coreboot.org/c/flashrom/+/69267
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings
Gerrit-Project: flashrom
Gerrit-Branch: master
Gerrit-Change-Id: I21cc1d631e92fa19006b967e85676f108e80b307
Gerrit-Change-Number: 69267
Gerrit-PatchSet: 9
Gerrit-Owner: Evan Benn <evanbenn(a)google.com>
Gerrit-Reviewer: Anastasia Klimchuk <aklm(a)chromium.org>
Gerrit-Reviewer: build bot (Jenkins) <no-reply(a)coreboot.org>
Gerrit-Attention: Evan Benn <evanbenn(a)google.com>
Gerrit-MessageType: newpatchset
Attention is currently required from: Thomas Heijligen.
Hello build bot (Jenkins), Thomas Heijligen, Anastasia Klimchuk,
I'd like you to reexamine a change. Please visit
https://review.coreboot.org/c/flashrom/+/69266
to look at the new patch set (#9).
Change subject: tests: Detect gcov file io and unmock io functions
......................................................................
tests: Detect gcov file io and unmock io functions
Code coverage writes data to disk, we need to unmock the file io at this
point so that the data is really written.
BUG=b:187647884
BRANCH=None
TEST=meson test
TEST=ninja coverage
Change-Id: If06053ecd78e886c8f7fc55813f4b5635be78c6b
Signed-off-by: Evan Benn <evanbenn(a)chromium.org>
---
M Documentation/building.md
M tests/meson.build
M tests/tests.c
A tests/unmock_io.c
A tests/unmock_io.h
M tests/wraps.h
6 files changed, 120 insertions(+), 1 deletion(-)
git pull ssh://review.coreboot.org:29418/flashrom refs/changes/66/69266/9
--
To view, visit https://review.coreboot.org/c/flashrom/+/69266
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings
Gerrit-Project: flashrom
Gerrit-Branch: master
Gerrit-Change-Id: If06053ecd78e886c8f7fc55813f4b5635be78c6b
Gerrit-Change-Number: 69266
Gerrit-PatchSet: 9
Gerrit-Owner: Evan Benn <evanbenn(a)google.com>
Gerrit-Reviewer: Anastasia Klimchuk <aklm(a)chromium.org>
Gerrit-Reviewer: Thomas Heijligen <src(a)posteo.de>
Gerrit-Reviewer: build bot (Jenkins) <no-reply(a)coreboot.org>
Gerrit-Attention: Thomas Heijligen <src(a)posteo.de>
Gerrit-MessageType: newpatchset