github.com/muhammedhassanm/blockchain@v0.0.0-20200120143007-697261defd4d/sawtooth-core-master/cli/tests/test_admin_keygen.py (about)

     1  # Copyright 2017 Intel Corporation
     2  #
     3  # Licensed under the Apache License, Version 2.0 (the "License");
     4  # you may not use this file except in compliance with the License.
     5  # You may obtain a copy of the License at
     6  #
     7  #     http://www.apache.org/licenses/LICENSE-2.0
     8  #
     9  # Unless required by applicable law or agreed to in writing, software
    10  # distributed under the License is distributed on an "AS IS" BASIS,
    11  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12  # See the License for the specific language governing permissions and
    13  # limitations under the License.
    14  # ------------------------------------------------------------------------------
    15  
    16  import argparse
    17  import os
    18  import unittest
    19  import sys
    20  
    21  
    22  from sawtooth_signing.secp256k1 import Secp256k1PrivateKey
    23  
    24  from sawtooth_cli.admin_command import keygen
    25  from sawtooth_cli.admin_command.config import get_key_dir
    26  
    27  
    28  class TestKeygen(unittest.TestCase):
    29  
    30      @classmethod
    31      def setUpClass(cls):
    32          cls._parser = None
    33          cls._key_dir = get_key_dir()
    34          cls._key_name = 'test_key'
    35          cls._priv_filename = os.path.join(cls._key_dir,
    36                                            cls._key_name + '.priv')
    37          cls._pub_filename = os.path.join(cls._key_dir,
    38                                           cls._key_name + '.pub')
    39          if not os.path.exists(cls._key_dir):
    40              try:
    41                  os.makedirs(cls._key_dir, exist_ok=True)
    42              except OSError as e:
    43                  print('Unable to create {}: {}'.format(cls._key_dir, e),
    44                        file=sys.stderr)
    45                  sys.exit(1)
    46  
    47      def setUp(self):
    48          self._parser = argparse.ArgumentParser(add_help=False)
    49  
    50          parent_parser = argparse.ArgumentParser(prog='test_keygen',
    51                                                  add_help=False)
    52  
    53          subparsers = self._parser.add_subparsers(title='subcommands',
    54                                                   dest='command')
    55  
    56          keygen.add_keygen_parser(subparsers, parent_parser)
    57  
    58      def tearDown(self):
    59          self.remove_key_files()
    60  
    61      def _parse_keygen_command(self, *args):
    62          cmd_args = ['keygen']
    63          cmd_args += args
    64          return self._parser.parse_args(cmd_args)
    65  
    66      def test_writes_valid_key(self):
    67          """Remove existing test files before creating new keys.
    68          """
    69          self.remove_key_files()
    70  
    71          args = self._parse_keygen_command(self._key_name)
    72          keygen.do_keygen(args)
    73  
    74          private_key = _read_signing_keys(self._priv_filename)
    75  
    76          self.assertIsNotNone(private_key)
    77  
    78      def test_force_write(self):
    79          """Write key files to be overwritten by test of --force option.
    80          """
    81          self.remove_key_files()
    82          args = self._parse_keygen_command(self._key_name)
    83          keygen.do_keygen(args)
    84  
    85          args = self._parse_keygen_command('--force', self._key_name)
    86          keygen.do_keygen(args)
    87  
    88          private_key = _read_signing_keys(self._priv_filename)
    89  
    90          self.assertIsNotNone(private_key)
    91  
    92      def remove_key_files(self):
    93          '''Removes the key files.
    94          '''
    95          try:
    96              os.remove(self._priv_filename)
    97              os.remove(self._pub_filename)
    98          except FileNotFoundError:
    99              pass
   100  
   101  
   102  def _read_signing_keys(key_filename):
   103      """Reads the given file as a HEX formatted key.
   104  
   105      Args:
   106          key_filename: The filename where the key is stored.
   107  
   108      Returns:
   109          tuple (str, str): the public and private key pair
   110  
   111      Raises:
   112          CliException: If unable to read the file.
   113      """
   114  
   115      filename = key_filename
   116  
   117      with open(filename, 'r') as key_file:
   118          signing_key = key_file.read().strip()
   119  
   120          return Secp256k1PrivateKey.from_hex(signing_key)