File: server_controls_steps.pl

package info (click to toggle)
libnet-ldapapi-perl 3.0.7-5
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 576 kB
  • sloc: perl: 3,913; ansic: 9; makefile: 8
file content (136 lines) | stat: -rw-r--r-- 3,951 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#!/usr/bin/perl

use strict;
use warnings;
  
use Test::More;
use Test::BDD::Cucumber::StepFile;

use Net::LDAPapi;
use Convert::ASN1;

our %TestConfig = %main::TestConfig;

use Data::Dumper;

Given qr/the server side sort control definition/i, sub { 
  if (!defined(S->{'asn'}{'server side sort'})) {
    S->{'asn'}{'server side sort'} = Convert::ASN1->new;
  
    S->{'asn'}{'server side sort'}->prepare(<<ASN) or die "prepare: ", S->{'asn'}{'server side sort'}->error;
  
  SortKey ::= SEQUENCE {
    attributeType   OCTET STRING,
    orderingRule    [0] OCTET STRING OPTIONAL,
    reverseOrder    [1] BOOLEAN }

  SortKeyList ::= SEQUENCE OF SortKey

  SortResult ::= SEQUENCE {
    sortResult  ENUMERATED,
    attributeType [0] OCTET STRING OPTIONAL }

ASN
  }
};

Given qr/the virtual list view control definition/i, sub { 
  if (!defined(S->{'asn'}{'virtual list view'})) {
    S->{'asn'}{'virtual list view'} = Convert::ASN1->new;
  
    S->{'asn'}{'virtual list view'}->prepare(<<ASN) or die "prepare: ", S->{'asn'}{'virtual list view'}->error;
  
  VirtualListViewRequest ::= SEQUENCE {
    beforeCount    INTEGER,
    afterCount     INTEGER,
    target       CHOICE {
      byOffset        [0] SEQUENCE {
        offset          INTEGER,
        contentCount    INTEGER
      },
      greaterThanOrEqual [1] OCTET STRING
    },
    contextID OCTET STRING OPTIONAL
  }

  VirtualListViewResponse ::= SEQUENCE {
    targetPosition    INTEGER,
    contentCount     INTEGER,
    virtualListViewResult ENUMERATED,
    contextID OCTET STRING OPTIONAL
  }

ASN
  }
};

When qr/I've created a server side sort control/i, sub {
  my $sss = S->{'asn'}{'server side sort'}->find('SortKeyList');

  my $sss_berval = $sss->encode($TestConfig{'server_controls'}{'sss'}) or die S->{'asn'}{'server side sort'}->error;

  my $sss_ctrl = S->{'object'}->create_control(
    -oid => '1.2.840.113556.1.4.473',
    -berval => $sss_berval,
  );

  S->{'server_controls'}{'server side sort'} = $sss_ctrl;
};

When qr/I've created a virtual list view control/i, sub {
  my $vlv = S->{'asn'}{'virtual list view'}->find('VirtualListViewRequest');

  my $vlv_berval = $vlv->encode($TestConfig{'server_controls'}{'vlv'}) or die S->{'asn'}{'virtual list view'}->error;

  my $vlv_ctrl = S->{'object'}->create_control(
    -oid => '2.16.840.1.113730.3.4.9',
    -berval => $vlv_berval,
  );

  S->{'server_controls'}{'virtual list view'} = $vlv_ctrl;
};

Then qr/the server side sort control was successfully used/i, sub {
  my $sss_response = S->{'asn'}{'server side sort'}->find('SortResult');

  my $berval = undef;
  
  foreach my $ctrl (@{S->{'cache'}{'serverctrls'}}) {
    my $ctrl_oid = S->{'object'}->get_control_oid($ctrl);
    
    if ($ctrl_oid eq '1.2.840.113556.1.4.474') {
      $berval = S->{'object'}->get_control_berval($ctrl);
      last;
    }
  }
  
  isnt($berval, undef, "Was a berval returned?");
  
  my $result = $sss_response->decode($berval) || ok(0, $sss_response->error);

  is(ldap_err2string($result->{'sortResult'}), ldap_err2string(LDAP_SUCCESS), "Does server side sort result code match?");        
};

Then qr/the virtual list view control was successfully used/i, sub {
  my $vlv_response = S->{'asn'}{'virtual list view'}->find('VirtualListViewResponse');

  my $berval = undef;
  
  foreach my $ctrl (@{S->{'cache'}{'serverctrls'}}) {
    my $ctrl_oid = S->{'object'}->get_control_oid($ctrl);
    
    if ($ctrl_oid eq '2.16.840.1.113730.3.4.10') {
      $berval = S->{'object'}->get_control_berval($ctrl);
      last;
    }
  }
  
  isnt($berval, undef, "Was a berval returned?");
  
  my $result = $vlv_response->decode($berval) || ok(0, $vlv_response->error);

  is(ldap_err2string($result->{'virtualListViewResult'}), ldap_err2string(LDAP_SUCCESS), "Does virtual list view result code match?");        
};


1;