# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

scenario Mapping2

entity Root
  type Root

entity CA1
  type Intermediate
  issuer Root 
    policy OID.1.0

entity CA2
  type Intermediate
  issuer CA1
    policy OID.1.0
    mapping OID.1.0:OID.1.1

entity CA3
  type Intermediate
  issuer CA2
    policy OID.1.1

entity User
  type EE
  issuer CA3
    policy OID.1.1

db All

import Root::
import CA1:Root:
import CA2:CA1:
import CA3:CA2:

verify User:CA3
  trust Root
  policy OID.1.0
# should fail, bug 430859
  result pass

verify User:CA3
  trust Root
  policy OID.1.1
# should pass, bug 430859
  result fail

verify User:CA3
  trust CA1
  policy OID.1.0
# should fail, bug 430859
  result pass

verify User:CA3
  trust CA1
  policy OID.1.1
# should pass, bug 430859
  result fail

verify User:CA3
  trust CA2
  policy OID.1.0
  result fail

verify User:CA3
  trust CA2
  policy OID.1.1
  result pass

