(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:server)
          op: assign_op.Equal
          rhs: {(SQ <'rump_server -lrumpvfs'>)}
          spids: [79]
        )
      ]
    )
    (C {<export>} {<Id.Lit_VarLike 'RUMP_SERVER='> (SQ <'unix://commsock'>)})
    (command.ShFunction
      name: startsrv
      body: 
        (BraceGroup
          children: [
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} 
              {(${ Id.VSub_Name server)} {($ Id.VSub_At '$@')} {(${ Id.VSub_Name RUMP_SERVER)}
            )
          ]
        )
    )
    (command.ShFunction
      name: test_case
      body: 
        (BraceGroup
          children: [
            (command.Sentence
              child: (C {<local>} {<Id.Lit_VarLike 'name='> (DQ (${ Id.VSub_Number 1))})
              terminator: <Id.Op_Semi _>
            )
            (C {<shift>})
            (C {<atf_test_case>} {(DQ (${ Id.VSub_Name name))} {<cleanup>})
            (C {<eval>} 
              {(DQ (${ Id.VSub_Name name) <'_head() {  '> <'\t\tatf_set '>) <require.progs> (DQ <' '>) 
                <rump_server> (DQ <' ; '> <'\t}'>)
              }
            )
            (C {<eval>} 
              {
                (DQ (${ Id.VSub_Name name) <'_body() { '> <'\t\t'> (${ Id.VSub_Name name) <'_prefun ; '> 
                  <'\t\tstartsrv '> ($ Id.VSub_At '$@') <' ; '> <'\t\t'> (${ Id.VSub_Name name) <' ; '> <'\t}'>
                )
              }
            )
            (C {<eval>} 
              {
                (DQ (${ Id.VSub_Name name) <'_cleanup() { '> 
                  <'\t\t[ -f halted ] && return 0 ; rump.halt ;\n'> <'\t}'>
                )
              }
            )
          ]
        )
    )
    (C {<test_case>} {<size>} {<-d>} 
      {<Id.Lit_VarLike 'key='> <'/img'> <Id.Lit_Comma ','> <Id.Lit_VarLike 'hostpath='> <the.img> 
        <Id.Lit_Comma ','> <Id.Lit_VarLike 'size='> <32k>
      }
    )
    (command.ShFunction
      name: size
      body: 
        (BraceGroup
          children: [
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
              {<inline> <Id.Lit_Colon ':'> (SQ <'32768\\n'>)} {<stat>} {<-f>} {<Id.Lit_Other '%'> <z>} {<the.img>}
            )
          ]
        )
    )
    (C {<test_case>} {<offset>} {<-d>} 
      {<Id.Lit_VarLike 'key='> <'/img'> <Id.Lit_Comma ','> <Id.Lit_VarLike 'hostpath='> <the.img> 
        <Id.Lit_Comma ','> <Id.Lit_VarLike 'size='> <32k> <Id.Lit_Comma ','> <Id.Lit_VarLike 'offset='> <16k>
      }
    )
    (command.ShFunction
      name: offset
      body: 
        (BraceGroup
          children: [
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
              {<inline> <Id.Lit_Colon ':'> (SQ <'49152\\n'>)} {<stat>} {<-f>} {<Id.Lit_Other '%'> <z>} {<the.img>}
            )
          ]
        )
    )
    (C {<test_case>} {<notrunc>} {<-d>} 
      {<Id.Lit_VarLike 'key='> <'/img'> <Id.Lit_Comma ','> <Id.Lit_VarLike 'hostpath='> <the.img> 
        <Id.Lit_Comma ','> <Id.Lit_VarLike 'size='> <8k> <Id.Lit_Comma ','> <Id.Lit_VarLike 'offset='> <16k>
      }
    )
    (command.ShFunction
      name: notrunc_prefun
      body: 
        (BraceGroup
          children: [
            (C {<dd>} {<Id.Lit_VarLike 'if='> <'/dev/zero'>} {<Id.Lit_VarLike 'of='> <the.img>} 
              {<Id.Lit_VarLike 'bs='> <1>} {<Id.Lit_VarLike 'oseek='> <65535>} {<Id.Lit_VarLike 'count='> <1>}
            )
          ]
        )
    )
    (command.ShFunction
      name: notrunc
      body: 
        (BraceGroup
          children: [
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
              {<inline> <Id.Lit_Colon ':'> (SQ <'65536\\n'>)} {<stat>} {<-f>} {<Id.Lit_Other '%'> <z>} {<the.img>}
            )
          ]
        )
    )
    (C {<test_case>} {<Id.KW_Data data>} {<-d>} 
      {<Id.Lit_VarLike 'key='> <'/img'> <Id.Lit_Comma ','> <Id.Lit_VarLike 'hostpath='> <the.img> 
        <Id.Lit_Comma ','> <Id.Lit_VarLike 'size='> <8k> <Id.Lit_Comma ','> <Id.Lit_VarLike 'offset='> <16k>
      }
    )
    (command.ShFunction
      name: data
      body: 
        (BraceGroup
          children: [
            (command.Pipeline
              children: [
                (C {<echo>} {(SQ <'test string'>)})
                (C {<dd>} {<Id.Lit_VarLike 'of='> <testfile>} {<Id.Lit_VarLike 'ibs='> <512>} 
                  {<Id.Lit_VarLike 'count='> <1>} {<Id.Lit_VarLike 'conv='> <sync>}
                )
              ]
              negated: F
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-e>} {<ignore>} 
              {<-x>} {(DQ <'dd if=testfile | rump.dd of=/img bs=512 count=1'>)}
            )
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<rump.halt>})
            (C {<touch>} {<halted>})
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-e>} {<ignore>} 
              {<-o>} {<file> <Id.Lit_Colon ':'> <testfile>} {<dd>} {<Id.Lit_VarLike 'if='> <the.img>} 
              {<Id.Lit_VarLike 'iseek='> <16k>} {<Id.Lit_VarLike 'bs='> <1>} {<Id.Lit_VarLike 'count='> <512>}
            )
          ]
        )
    )
    (C {<test_case>} {<type_chr>} {<-d>} 
      {<Id.Lit_VarLike 'key='> <'/img'> <Id.Lit_Comma ','> <Id.Lit_VarLike 'hostpath='> <the.img> 
        <Id.Lit_Comma ','> <Id.Lit_VarLike 'size='> <32k> <Id.Lit_Comma ','> <Id.Lit_VarLike 'type='> <chr>
      }
    )
    (command.ShFunction
      name: type_chr
      body: 
        (BraceGroup
          children: [
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
              {<inline> <Id.Lit_Colon ':'> (SQ <'Character Device\\n'>)} {<env>} {<Id.Lit_VarLike 'LD_PRELOAD='> <'/usr/lib/librumphijack.so'>} {<stat>} {<-f>} 
              {<Id.Lit_Other '%'> <HT>} {<'/rump/img'>}
            )
          ]
        )
    )
    (C {<test_case>} {<type_reg>} {<-d>} 
      {<Id.Lit_VarLike 'key='> <'/img'> <Id.Lit_Comma ','> <Id.Lit_VarLike 'hostpath='> <the.img> 
        <Id.Lit_Comma ','> <Id.Lit_VarLike 'size='> <32k> <Id.Lit_Comma ','> <Id.Lit_VarLike 'type='> <reg>
      }
    )
    (command.ShFunction
      name: type_reg
      body: 
        (BraceGroup
          children: [
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
              {<inline> <Id.Lit_Colon ':'> (SQ <'Regular File\\n'>)} {<env>} {<Id.Lit_VarLike 'LD_PRELOAD='> <'/usr/lib/librumphijack.so'>} {<stat>} {<-f>} 
              {<Id.Lit_Other '%'> <HT>} {<'/rump/img'>}
            )
          ]
        )
    )
    (C {<test_case>} {<type_blk>} {<-d>} 
      {<Id.Lit_VarLike 'key='> <'/img'> <Id.Lit_Comma ','> <Id.Lit_VarLike 'hostpath='> <the.img> 
        <Id.Lit_Comma ','> <Id.Lit_VarLike 'size='> <32k> <Id.Lit_Comma ','> <Id.Lit_VarLike 'type='> <blk>
      }
    )
    (command.ShFunction
      name: type_blk
      body: 
        (BraceGroup
          children: [
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
              {<inline> <Id.Lit_Colon ':'> (SQ <'Block Device\\n'>)} {<env>} {<Id.Lit_VarLike 'LD_PRELOAD='> <'/usr/lib/librumphijack.so'>} {<stat>} {<-f>} 
              {<Id.Lit_Other '%'> <HT>} {<'/rump/img'>}
            )
          ]
        )
    )
    (C {<test_case>} {<type_blk_default>} {<-d>} 
      {<Id.Lit_VarLike 'key='> <'/img'> <Id.Lit_Comma ','> <Id.Lit_VarLike 'hostpath='> <the.img> 
        <Id.Lit_Comma ','> <Id.Lit_VarLike 'size='> <32k>
      }
    )
    (command.ShFunction
      name: type_blk_default
      body: 
        (BraceGroup
          children: [
            (C {<atf_check>} {<-s>} {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>} {<-o>} 
              {<inline> <Id.Lit_Colon ':'> (SQ <'Block Device\\n'>)} {<env>} {<Id.Lit_VarLike 'LD_PRELOAD='> <'/usr/lib/librumphijack.so'>} {<stat>} {<-f>} 
              {<Id.Lit_Other '%'> <HT>} {<'/rump/img'>}
            )
          ]
        )
    )
    (command.ShFunction
      name: atf_init_test_cases
      body: 
        (BraceGroup
          children: [
            (C {<atf_add_test_case>} {<size>})
            (C {<atf_add_test_case>} {<offset>})
            (C {<atf_add_test_case>} {<notrunc>})
            (C {<atf_add_test_case>} {<Id.KW_Data data>})
            (C {<atf_add_test_case>} {<type_chr>})
            (C {<atf_add_test_case>} {<type_reg>})
            (C {<atf_add_test_case>} {<type_blk>})
            (C {<atf_add_test_case>} {<type_blk_default>})
          ]
        )
    )
  ]
)