qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] tests/avocado/aspeed: Add TPM TIS I2C test
@ 2023-03-28 12:08 Joel Stanley
  2023-03-28 12:50 ` Stefan Berger
                   ` (3 more replies)
  0 siblings, 4 replies; 6+ messages in thread
From: Joel Stanley @ 2023-03-28 12:08 UTC (permalink / raw)
  To: Cédric Le Goater, stefanb, ninad
  Cc: Cleber Rosa, Philippe Mathieu-Daudé,
	Wainer dos Santos Moschetta, Beraldo Leal, qemu-devel

Add a new buildroot image based test that attaches a TPM emulator to the
I2C bus and checks for a known PCR0 value for the image that was booted.

Note that this does not tear down swtpm process when qemu execution fails.
The swtpm process will exit when qemu exits if a connection has been
made, but if the test errors before connection then the swtpm process
will still be around.

Signed-off-by: Joel Stanley <joel@jms.id.au>
---
 tests/avocado/machine_aspeed.py | 42 +++++++++++++++++++++++++++++++--
 1 file changed, 40 insertions(+), 2 deletions(-)

diff --git a/tests/avocado/machine_aspeed.py b/tests/avocado/machine_aspeed.py
index 35723af4ede0..a4485a5c4d4d 100644
--- a/tests/avocado/machine_aspeed.py
+++ b/tests/avocado/machine_aspeed.py
@@ -7,14 +7,18 @@
 
 import time
 import os
+import tempfile
+import subprocess
 
 from avocado_qemu import QemuSystemTest
 from avocado_qemu import wait_for_console_pattern
 from avocado_qemu import exec_command
 from avocado_qemu import exec_command_and_wait_for_pattern
 from avocado_qemu import interrupt_interactive_console_until_pattern
+from avocado_qemu import has_cmd
 from avocado.utils import archive
 from avocado import skipIf
+from avocado import skipUnless
 
 
 class AST1030Machine(QemuSystemTest):
@@ -132,7 +136,7 @@ def test_arm_ast2500_romulus_openbmc_v2_9_0(self):
 
         self.do_test_arm_aspeed(image_path)
 
-    def do_test_arm_aspeed_buildroot_start(self, image, cpu_id):
+    def do_test_arm_aspeed_buildroot_start(self, image, cpu_id, pattern='Aspeed EVB'):
         self.require_netdev('user')
 
         self.vm.set_console()
@@ -146,7 +150,7 @@ def do_test_arm_aspeed_buildroot_start(self, image, cpu_id):
         self.wait_for_console_pattern('Booting Linux on physical CPU ' + cpu_id)
         self.wait_for_console_pattern('lease of 10.0.2.15')
         # the line before login:
-        self.wait_for_console_pattern('Aspeed EVB')
+        self.wait_for_console_pattern(pattern)
         time.sleep(0.1)
         exec_command(self, 'root')
         time.sleep(0.1)
@@ -229,6 +233,40 @@ def test_arm_ast2600_evb_buildroot(self):
              '0000000 ffaa ffff ffff ffff ffff ffff ffff ffff');
         self.do_test_arm_aspeed_buildroot_poweroff()
 
+    @skipUnless(*has_cmd('swtpm'))
+    def test_arm_ast2600_evb_buildroot_tpm(self):
+        """
+        :avocado: tags=arch:arm
+        :avocado: tags=machine:ast2600-evb
+        """
+
+        image_url = ('https://github.com/legoater/qemu-aspeed-boot/raw/master/'
+                     'images/ast2600-evb/buildroot-2023.02-tpm/flash.img')
+        image_hash = ('a46009ae8a5403a0826d607215e731a8c68d27c14c41e55331706b8f9c7bd997')
+        image_path = self.fetch_asset(image_url, asset_hash=image_hash,
+                                      algorithm='sha256')
+
+        socket = os.path.join(self.vm.sock_dir, 'swtpm-socket')
+
+        subprocess.run(['swtpm', 'socket', '-d', '--tpm2',
+                        '--tpmstate', f'dir={self.vm.temp_dir}',
+                        '--ctrl', f'type=unixio,path={socket}'])
+
+        self.vm.add_args('-chardev', f'socket,id=chrtpm,path={socket}')
+        self.vm.add_args('-tpmdev', 'emulator,id=tpm0,chardev=chrtpm')
+        self.vm.add_args('-device',
+                         'tpm-tis-i2c,tpmdev=tpm0,bus=aspeed.i2c.bus.12,address=0x2e')
+        self.do_test_arm_aspeed_buildroot_start(image_path, '0xf00', 'Aspeed AST2600 EVB')
+        exec_command(self, "passw0rd")
+
+        exec_command_and_wait_for_pattern(self,
+            'echo tpm_tis_i2c 0x2e > /sys/bus/i2c/devices/i2c-12/new_device',
+            'tpm_tis_i2c 12-002e: 2.0 TPM (device-id 0x1, rev-id 1)');
+        exec_command_and_wait_for_pattern(self,
+            'cat /sys/class/tpm/tpm0/pcr-sha256/0',
+            'B804724EA13F52A9072BA87FE8FDCC497DFC9DF9AA15B9088694639C431688E0');
+
+        self.do_test_arm_aspeed_buildroot_poweroff()
 
 class AST2x00MachineSDK(QemuSystemTest):
 
-- 
2.39.2



^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH] tests/avocado/aspeed: Add TPM TIS I2C test
  2023-03-28 12:08 [PATCH] tests/avocado/aspeed: Add TPM TIS I2C test Joel Stanley
@ 2023-03-28 12:50 ` Stefan Berger
  2023-03-28 13:21 ` Cédric Le Goater
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 6+ messages in thread
From: Stefan Berger @ 2023-03-28 12:50 UTC (permalink / raw)
  To: Joel Stanley, Cédric Le Goater, ninad
  Cc: Cleber Rosa, Philippe Mathieu-Daudé,
	Wainer dos Santos Moschetta, Beraldo Leal, qemu-devel



On 3/28/23 08:08, Joel Stanley wrote:
> Add a new buildroot image based test that attaches a TPM emulator to the
> I2C bus and checks for a known PCR0 value for the image that was booted.
> 
> Note that this does not tear down swtpm process when qemu execution fails.
> The swtpm process will exit when qemu exits if a connection has been
> made, but if the test errors before connection then the swtpm process
> will still be around.
> 
> Signed-off-by: Joel Stanley <joel@jms.id.au>

Reviewed-by: Stefan Berger <stefanb@linux.ibm.com>

> ---
>   tests/avocado/machine_aspeed.py | 42 +++++++++++++++++++++++++++++++--
>   1 file changed, 40 insertions(+), 2 deletions(-)
> 
> diff --git a/tests/avocado/machine_aspeed.py b/tests/avocado/machine_aspeed.py
> index 35723af4ede0..a4485a5c4d4d 100644
> --- a/tests/avocado/machine_aspeed.py
> +++ b/tests/avocado/machine_aspeed.py
> @@ -7,14 +7,18 @@
>   
>   import time
>   import os
> +import tempfile
> +import subprocess
>   
>   from avocado_qemu import QemuSystemTest
>   from avocado_qemu import wait_for_console_pattern
>   from avocado_qemu import exec_command
>   from avocado_qemu import exec_command_and_wait_for_pattern
>   from avocado_qemu import interrupt_interactive_console_until_pattern
> +from avocado_qemu import has_cmd
>   from avocado.utils import archive
>   from avocado import skipIf
> +from avocado import skipUnless
>   
>   
>   class AST1030Machine(QemuSystemTest):
> @@ -132,7 +136,7 @@ def test_arm_ast2500_romulus_openbmc_v2_9_0(self):
>   
>           self.do_test_arm_aspeed(image_path)
>   
> -    def do_test_arm_aspeed_buildroot_start(self, image, cpu_id):
> +    def do_test_arm_aspeed_buildroot_start(self, image, cpu_id, pattern='Aspeed EVB'):
>           self.require_netdev('user')
>   
>           self.vm.set_console()
> @@ -146,7 +150,7 @@ def do_test_arm_aspeed_buildroot_start(self, image, cpu_id):
>           self.wait_for_console_pattern('Booting Linux on physical CPU ' + cpu_id)
>           self.wait_for_console_pattern('lease of 10.0.2.15')
>           # the line before login:
> -        self.wait_for_console_pattern('Aspeed EVB')
> +        self.wait_for_console_pattern(pattern)
>           time.sleep(0.1)
>           exec_command(self, 'root')
>           time.sleep(0.1)
> @@ -229,6 +233,40 @@ def test_arm_ast2600_evb_buildroot(self):
>                '0000000 ffaa ffff ffff ffff ffff ffff ffff ffff');
>           self.do_test_arm_aspeed_buildroot_poweroff()
>   
> +    @skipUnless(*has_cmd('swtpm'))
> +    def test_arm_ast2600_evb_buildroot_tpm(self):
> +        """
> +        :avocado: tags=arch:arm
> +        :avocado: tags=machine:ast2600-evb
> +        """
> +
> +        image_url = ('https://github.com/legoater/qemu-aspeed-boot/raw/master/'
> +                     'images/ast2600-evb/buildroot-2023.02-tpm/flash.img')
> +        image_hash = ('a46009ae8a5403a0826d607215e731a8c68d27c14c41e55331706b8f9c7bd997')
> +        image_path = self.fetch_asset(image_url, asset_hash=image_hash,
> +                                      algorithm='sha256')
> +
> +        socket = os.path.join(self.vm.sock_dir, 'swtpm-socket')
> +
> +        subprocess.run(['swtpm', 'socket', '-d', '--tpm2',
> +                        '--tpmstate', f'dir={self.vm.temp_dir}',
> +                        '--ctrl', f'type=unixio,path={socket}'])
> +
> +        self.vm.add_args('-chardev', f'socket,id=chrtpm,path={socket}')
> +        self.vm.add_args('-tpmdev', 'emulator,id=tpm0,chardev=chrtpm')
> +        self.vm.add_args('-device',
> +                         'tpm-tis-i2c,tpmdev=tpm0,bus=aspeed.i2c.bus.12,address=0x2e')
> +        self.do_test_arm_aspeed_buildroot_start(image_path, '0xf00', 'Aspeed AST2600 EVB')
> +        exec_command(self, "passw0rd")
> +
> +        exec_command_and_wait_for_pattern(self,
> +            'echo tpm_tis_i2c 0x2e > /sys/bus/i2c/devices/i2c-12/new_device',
> +            'tpm_tis_i2c 12-002e: 2.0 TPM (device-id 0x1, rev-id 1)');
> +        exec_command_and_wait_for_pattern(self,
> +            'cat /sys/class/tpm/tpm0/pcr-sha256/0',
> +            'B804724EA13F52A9072BA87FE8FDCC497DFC9DF9AA15B9088694639C431688E0');
> +
> +        self.do_test_arm_aspeed_buildroot_poweroff()
>   
>   class AST2x00MachineSDK(QemuSystemTest):
>   


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] tests/avocado/aspeed: Add TPM TIS I2C test
  2023-03-28 12:08 [PATCH] tests/avocado/aspeed: Add TPM TIS I2C test Joel Stanley
  2023-03-28 12:50 ` Stefan Berger
@ 2023-03-28 13:21 ` Cédric Le Goater
  2023-03-28 13:42   ` Stefan Berger
  2023-03-28 13:25 ` Ninad Palsule
  2023-03-28 14:11 ` Ninad Palsule
  3 siblings, 1 reply; 6+ messages in thread
From: Cédric Le Goater @ 2023-03-28 13:21 UTC (permalink / raw)
  To: Joel Stanley, stefanb, ninad
  Cc: Cleber Rosa, Philippe Mathieu-Daudé,
	Wainer dos Santos Moschetta, Beraldo Leal, qemu-devel

On 3/28/23 14:08, Joel Stanley wrote:
> Add a new buildroot image based test that attaches a TPM emulator to the
> I2C bus and checks for a known PCR0 value for the image that was booted.
> 
> Note that this does not tear down swtpm process when qemu execution fails.
> The swtpm process will exit when qemu exits if a connection has been
> made, but if the test errors before connection then the swtpm process
> will still be around.
> 
> Signed-off-by: Joel Stanley <joel@jms.id.au>

Reviewed-by: Cédric Le Goater <clg@kaod.org>


Stefan,

Could you please take this patch through the TPM queue with the other
TPM TIS I2C patches ?

Thanks,

C.

> ---
>   tests/avocado/machine_aspeed.py | 42 +++++++++++++++++++++++++++++++--
>   1 file changed, 40 insertions(+), 2 deletions(-)
> 
> diff --git a/tests/avocado/machine_aspeed.py b/tests/avocado/machine_aspeed.py
> index 35723af4ede0..a4485a5c4d4d 100644
> --- a/tests/avocado/machine_aspeed.py
> +++ b/tests/avocado/machine_aspeed.py
> @@ -7,14 +7,18 @@
>   
>   import time
>   import os
> +import tempfile
> +import subprocess
>   
>   from avocado_qemu import QemuSystemTest
>   from avocado_qemu import wait_for_console_pattern
>   from avocado_qemu import exec_command
>   from avocado_qemu import exec_command_and_wait_for_pattern
>   from avocado_qemu import interrupt_interactive_console_until_pattern
> +from avocado_qemu import has_cmd
>   from avocado.utils import archive
>   from avocado import skipIf
> +from avocado import skipUnless
>   
>   
>   class AST1030Machine(QemuSystemTest):
> @@ -132,7 +136,7 @@ def test_arm_ast2500_romulus_openbmc_v2_9_0(self):
>   
>           self.do_test_arm_aspeed(image_path)
>   
> -    def do_test_arm_aspeed_buildroot_start(self, image, cpu_id):
> +    def do_test_arm_aspeed_buildroot_start(self, image, cpu_id, pattern='Aspeed EVB'):
>           self.require_netdev('user')
>   
>           self.vm.set_console()
> @@ -146,7 +150,7 @@ def do_test_arm_aspeed_buildroot_start(self, image, cpu_id):
>           self.wait_for_console_pattern('Booting Linux on physical CPU ' + cpu_id)
>           self.wait_for_console_pattern('lease of 10.0.2.15')
>           # the line before login:
> -        self.wait_for_console_pattern('Aspeed EVB')
> +        self.wait_for_console_pattern(pattern)
>           time.sleep(0.1)
>           exec_command(self, 'root')
>           time.sleep(0.1)
> @@ -229,6 +233,40 @@ def test_arm_ast2600_evb_buildroot(self):
>                '0000000 ffaa ffff ffff ffff ffff ffff ffff ffff');
>           self.do_test_arm_aspeed_buildroot_poweroff()
>   
> +    @skipUnless(*has_cmd('swtpm'))
> +    def test_arm_ast2600_evb_buildroot_tpm(self):
> +        """
> +        :avocado: tags=arch:arm
> +        :avocado: tags=machine:ast2600-evb
> +        """
> +
> +        image_url = ('https://github.com/legoater/qemu-aspeed-boot/raw/master/'
> +                     'images/ast2600-evb/buildroot-2023.02-tpm/flash.img')
> +        image_hash = ('a46009ae8a5403a0826d607215e731a8c68d27c14c41e55331706b8f9c7bd997')
> +        image_path = self.fetch_asset(image_url, asset_hash=image_hash,
> +                                      algorithm='sha256')
> +
> +        socket = os.path.join(self.vm.sock_dir, 'swtpm-socket')
> +
> +        subprocess.run(['swtpm', 'socket', '-d', '--tpm2',
> +                        '--tpmstate', f'dir={self.vm.temp_dir}',
> +                        '--ctrl', f'type=unixio,path={socket}'])
> +
> +        self.vm.add_args('-chardev', f'socket,id=chrtpm,path={socket}')
> +        self.vm.add_args('-tpmdev', 'emulator,id=tpm0,chardev=chrtpm')
> +        self.vm.add_args('-device',
> +                         'tpm-tis-i2c,tpmdev=tpm0,bus=aspeed.i2c.bus.12,address=0x2e')
> +        self.do_test_arm_aspeed_buildroot_start(image_path, '0xf00', 'Aspeed AST2600 EVB')
> +        exec_command(self, "passw0rd")
> +
> +        exec_command_and_wait_for_pattern(self,
> +            'echo tpm_tis_i2c 0x2e > /sys/bus/i2c/devices/i2c-12/new_device',
> +            'tpm_tis_i2c 12-002e: 2.0 TPM (device-id 0x1, rev-id 1)');
> +        exec_command_and_wait_for_pattern(self,
> +            'cat /sys/class/tpm/tpm0/pcr-sha256/0',
> +            'B804724EA13F52A9072BA87FE8FDCC497DFC9DF9AA15B9088694639C431688E0');
> +
> +        self.do_test_arm_aspeed_buildroot_poweroff()
>   
>   class AST2x00MachineSDK(QemuSystemTest):
>   



^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] tests/avocado/aspeed: Add TPM TIS I2C test
  2023-03-28 12:08 [PATCH] tests/avocado/aspeed: Add TPM TIS I2C test Joel Stanley
  2023-03-28 12:50 ` Stefan Berger
  2023-03-28 13:21 ` Cédric Le Goater
@ 2023-03-28 13:25 ` Ninad Palsule
  2023-03-28 14:11 ` Ninad Palsule
  3 siblings, 0 replies; 6+ messages in thread
From: Ninad Palsule @ 2023-03-28 13:25 UTC (permalink / raw)
  To: Joel Stanley, Cédric Le Goater, stefanb, ninad
  Cc: Cleber Rosa, Philippe Mathieu-Daudé,
	Wainer dos Santos Moschetta, Beraldo Leal, qemu-devel


On 3/28/23 7:08 AM, Joel Stanley wrote:
> Add a new buildroot image based test that attaches a TPM emulator to the
> I2C bus and checks for a known PCR0 value for the image that was booted.
>
> Note that this does not tear down swtpm process when qemu execution fails.
> The swtpm process will exit when qemu exits if a connection has been
> made, but if the test errors before connection then the swtpm process
> will still be around.
>
> Signed-off-by: Joel Stanley <joel@jms.id.au>
Reviewed-by: Ninad Palsule <ninad@linux.ibm.com>
> ---
>   tests/avocado/machine_aspeed.py | 42 +++++++++++++++++++++++++++++++--
>   1 file changed, 40 insertions(+), 2 deletions(-)
>
> diff --git a/tests/avocado/machine_aspeed.py b/tests/avocado/machine_aspeed.py
> index 35723af4ede0..a4485a5c4d4d 100644
> --- a/tests/avocado/machine_aspeed.py
> +++ b/tests/avocado/machine_aspeed.py
> @@ -7,14 +7,18 @@
>   
>   import time
>   import os
> +import tempfile
> +import subprocess
>   
>   from avocado_qemu import QemuSystemTest
>   from avocado_qemu import wait_for_console_pattern
>   from avocado_qemu import exec_command
>   from avocado_qemu import exec_command_and_wait_for_pattern
>   from avocado_qemu import interrupt_interactive_console_until_pattern
> +from avocado_qemu import has_cmd
>   from avocado.utils import archive
>   from avocado import skipIf
> +from avocado import skipUnless
>   
>   
>   class AST1030Machine(QemuSystemTest):
> @@ -132,7 +136,7 @@ def test_arm_ast2500_romulus_openbmc_v2_9_0(self):
>   
>           self.do_test_arm_aspeed(image_path)
>   
> -    def do_test_arm_aspeed_buildroot_start(self, image, cpu_id):
> +    def do_test_arm_aspeed_buildroot_start(self, image, cpu_id, pattern='Aspeed EVB'):
>           self.require_netdev('user')
>   
>           self.vm.set_console()
> @@ -146,7 +150,7 @@ def do_test_arm_aspeed_buildroot_start(self, image, cpu_id):
>           self.wait_for_console_pattern('Booting Linux on physical CPU ' + cpu_id)
>           self.wait_for_console_pattern('lease of 10.0.2.15')
>           # the line before login:
> -        self.wait_for_console_pattern('Aspeed EVB')
> +        self.wait_for_console_pattern(pattern)
>           time.sleep(0.1)
>           exec_command(self, 'root')
>           time.sleep(0.1)
> @@ -229,6 +233,40 @@ def test_arm_ast2600_evb_buildroot(self):
>                '0000000 ffaa ffff ffff ffff ffff ffff ffff ffff');
>           self.do_test_arm_aspeed_buildroot_poweroff()
>   
> +    @skipUnless(*has_cmd('swtpm'))
> +    def test_arm_ast2600_evb_buildroot_tpm(self):
> +        """
> +        :avocado: tags=arch:arm
> +        :avocado: tags=machine:ast2600-evb
> +        """
> +
> +        image_url = ('https://github.com/legoater/qemu-aspeed-boot/raw/master/'
> +                     'images/ast2600-evb/buildroot-2023.02-tpm/flash.img')
> +        image_hash = ('a46009ae8a5403a0826d607215e731a8c68d27c14c41e55331706b8f9c7bd997')
> +        image_path = self.fetch_asset(image_url, asset_hash=image_hash,
> +                                      algorithm='sha256')
> +
> +        socket = os.path.join(self.vm.sock_dir, 'swtpm-socket')
> +
> +        subprocess.run(['swtpm', 'socket', '-d', '--tpm2',
> +                        '--tpmstate', f'dir={self.vm.temp_dir}',
> +                        '--ctrl', f'type=unixio,path={socket}'])
> +
> +        self.vm.add_args('-chardev', f'socket,id=chrtpm,path={socket}')
> +        self.vm.add_args('-tpmdev', 'emulator,id=tpm0,chardev=chrtpm')
> +        self.vm.add_args('-device',
> +                         'tpm-tis-i2c,tpmdev=tpm0,bus=aspeed.i2c.bus.12,address=0x2e')
> +        self.do_test_arm_aspeed_buildroot_start(image_path, '0xf00', 'Aspeed AST2600 EVB')
> +        exec_command(self, "passw0rd")
> +
> +        exec_command_and_wait_for_pattern(self,
> +            'echo tpm_tis_i2c 0x2e > /sys/bus/i2c/devices/i2c-12/new_device',
> +            'tpm_tis_i2c 12-002e: 2.0 TPM (device-id 0x1, rev-id 1)');
> +        exec_command_and_wait_for_pattern(self,
> +            'cat /sys/class/tpm/tpm0/pcr-sha256/0',
> +            'B804724EA13F52A9072BA87FE8FDCC497DFC9DF9AA15B9088694639C431688E0');
> +
> +        self.do_test_arm_aspeed_buildroot_poweroff()
>   
>   class AST2x00MachineSDK(QemuSystemTest):
>   


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] tests/avocado/aspeed: Add TPM TIS I2C test
  2023-03-28 13:21 ` Cédric Le Goater
@ 2023-03-28 13:42   ` Stefan Berger
  0 siblings, 0 replies; 6+ messages in thread
From: Stefan Berger @ 2023-03-28 13:42 UTC (permalink / raw)
  To: Cédric Le Goater, Joel Stanley, ninad
  Cc: Cleber Rosa, Philippe Mathieu-Daudé,
	Wainer dos Santos Moschetta, Beraldo Leal, qemu-devel



On 3/28/23 09:21, Cédric Le Goater wrote:
> On 3/28/23 14:08, Joel Stanley wrote:
>> Add a new buildroot image based test that attaches a TPM emulator to the
>> I2C bus and checks for a known PCR0 value for the image that was booted.
>>
>> Note that this does not tear down swtpm process when qemu execution fails.
>> The swtpm process will exit when qemu exits if a connection has been
>> made, but if the test errors before connection then the swtpm process
>> will still be around.
>>
>> Signed-off-by: Joel Stanley <joel@jms.id.au>
> 
> Reviewed-by: Cédric Le Goater <clg@kaod.org>
> 
> 
> Stefan,
> 
> Could you please take this patch through the TPM queue with the other
> TPM TIS I2C patches ?

Yes.

    Stefan


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] tests/avocado/aspeed: Add TPM TIS I2C test
  2023-03-28 12:08 [PATCH] tests/avocado/aspeed: Add TPM TIS I2C test Joel Stanley
                   ` (2 preceding siblings ...)
  2023-03-28 13:25 ` Ninad Palsule
@ 2023-03-28 14:11 ` Ninad Palsule
  3 siblings, 0 replies; 6+ messages in thread
From: Ninad Palsule @ 2023-03-28 14:11 UTC (permalink / raw)
  To: Joel Stanley, Cédric Le Goater, stefanb, ninad
  Cc: Cleber Rosa, Philippe Mathieu-Daudé,
	Wainer dos Santos Moschetta, Beraldo Leal, qemu-devel

Hi Joel,

Thanks for the test.

Ninad


On 3/28/23 7:08 AM, Joel Stanley wrote:
> Add a new buildroot image based test that attaches a TPM emulator to the
> I2C bus and checks for a known PCR0 value for the image that was booted.
>
> Note that this does not tear down swtpm process when qemu execution fails.
> The swtpm process will exit when qemu exits if a connection has been
> made, but if the test errors before connection then the swtpm process
> will still be around.
>
> Signed-off-by: Joel Stanley <joel@jms.id.au>
> ---
>   tests/avocado/machine_aspeed.py | 42 +++++++++++++++++++++++++++++++--
>   1 file changed, 40 insertions(+), 2 deletions(-)
>
> diff --git a/tests/avocado/machine_aspeed.py b/tests/avocado/machine_aspeed.py
> index 35723af4ede0..a4485a5c4d4d 100644
> --- a/tests/avocado/machine_aspeed.py
> +++ b/tests/avocado/machine_aspeed.py
> @@ -7,14 +7,18 @@
>   
>   import time
>   import os
> +import tempfile
> +import subprocess
>   
>   from avocado_qemu import QemuSystemTest
>   from avocado_qemu import wait_for_console_pattern
>   from avocado_qemu import exec_command
>   from avocado_qemu import exec_command_and_wait_for_pattern
>   from avocado_qemu import interrupt_interactive_console_until_pattern
> +from avocado_qemu import has_cmd
>   from avocado.utils import archive
>   from avocado import skipIf
> +from avocado import skipUnless
>   
>   
>   class AST1030Machine(QemuSystemTest):
> @@ -132,7 +136,7 @@ def test_arm_ast2500_romulus_openbmc_v2_9_0(self):
>   
>           self.do_test_arm_aspeed(image_path)
>   
> -    def do_test_arm_aspeed_buildroot_start(self, image, cpu_id):
> +    def do_test_arm_aspeed_buildroot_start(self, image, cpu_id, pattern='Aspeed EVB'):
>           self.require_netdev('user')
>   
>           self.vm.set_console()
> @@ -146,7 +150,7 @@ def do_test_arm_aspeed_buildroot_start(self, image, cpu_id):
>           self.wait_for_console_pattern('Booting Linux on physical CPU ' + cpu_id)
>           self.wait_for_console_pattern('lease of 10.0.2.15')
>           # the line before login:
> -        self.wait_for_console_pattern('Aspeed EVB')
> +        self.wait_for_console_pattern(pattern)
>           time.sleep(0.1)
>           exec_command(self, 'root')
>           time.sleep(0.1)
> @@ -229,6 +233,40 @@ def test_arm_ast2600_evb_buildroot(self):
>                '0000000 ffaa ffff ffff ffff ffff ffff ffff ffff');
>           self.do_test_arm_aspeed_buildroot_poweroff()
>   
> +    @skipUnless(*has_cmd('swtpm'))
> +    def test_arm_ast2600_evb_buildroot_tpm(self):
> +        """
> +        :avocado: tags=arch:arm
> +        :avocado: tags=machine:ast2600-evb
> +        """
> +
> +        image_url = ('https://github.com/legoater/qemu-aspeed-boot/raw/master/'
> +                     'images/ast2600-evb/buildroot-2023.02-tpm/flash.img')
> +        image_hash = ('a46009ae8a5403a0826d607215e731a8c68d27c14c41e55331706b8f9c7bd997')
> +        image_path = self.fetch_asset(image_url, asset_hash=image_hash,
> +                                      algorithm='sha256')
> +
> +        socket = os.path.join(self.vm.sock_dir, 'swtpm-socket')
> +
> +        subprocess.run(['swtpm', 'socket', '-d', '--tpm2',
> +                        '--tpmstate', f'dir={self.vm.temp_dir}',
> +                        '--ctrl', f'type=unixio,path={socket}'])
> +
> +        self.vm.add_args('-chardev', f'socket,id=chrtpm,path={socket}')
> +        self.vm.add_args('-tpmdev', 'emulator,id=tpm0,chardev=chrtpm')
> +        self.vm.add_args('-device',
> +                         'tpm-tis-i2c,tpmdev=tpm0,bus=aspeed.i2c.bus.12,address=0x2e')
> +        self.do_test_arm_aspeed_buildroot_start(image_path, '0xf00', 'Aspeed AST2600 EVB')
> +        exec_command(self, "passw0rd")
> +
> +        exec_command_and_wait_for_pattern(self,
> +            'echo tpm_tis_i2c 0x2e > /sys/bus/i2c/devices/i2c-12/new_device',
> +            'tpm_tis_i2c 12-002e: 2.0 TPM (device-id 0x1, rev-id 1)');
> +        exec_command_and_wait_for_pattern(self,
> +            'cat /sys/class/tpm/tpm0/pcr-sha256/0',
> +            'B804724EA13F52A9072BA87FE8FDCC497DFC9DF9AA15B9088694639C431688E0');
> +
> +        self.do_test_arm_aspeed_buildroot_poweroff()
>   
>   class AST2x00MachineSDK(QemuSystemTest):
>   


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2023-03-28 14:12 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-03-28 12:08 [PATCH] tests/avocado/aspeed: Add TPM TIS I2C test Joel Stanley
2023-03-28 12:50 ` Stefan Berger
2023-03-28 13:21 ` Cédric Le Goater
2023-03-28 13:42   ` Stefan Berger
2023-03-28 13:25 ` Ninad Palsule
2023-03-28 14:11 ` Ninad Palsule

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).