Amazon-DynamoDB

 view release on metacpan or  search on metacpan

t/02-tables-lsi.t  view on Meta::CPAN


use Data::Dumper;

unless ( $ENV{'AMAZON_DYNAMODB_EXPENSIVE_TESTS'} ) {
    plan skip_all => 'Testing this module for real costs money.';
} else {
    plan tests => 9;
}


my $ddb = TestSettings::get_ddb();

my $table_name = TestSettings::random_table_name();

{
    my @all_tables;    
    ok($ddb->each_table(
        sub {
            my $table_name =shift;
            push @all_tables, $table_name;
        })->is_done, "List tables is complete");
    bail_on_fail;
    is(scalar(grep { $_ eq $table_name } @all_tables), 0, "New table to create does not exist");
}

my $create = $ddb->create_table(TableName => $table_name,
                                ReadCapacityUnits => 2,
                                WriteCapacityUnits => 2,
                                AttributeDefinitions => {
                                    user_id => 'N',
                                    date => 'N',
                                },
                                KeySchema => ['user_id', 'date'],
                                LocalSecondaryIndexes => [
                                    {
                                        IndexName => 'UserDateIndex',
                                        KeySchema => ['user_id', 'date'],
                                        Projection => {
                                            ProjectionType => 'KEYS_ONLY',
                                        },
                                    }
                                ]
                            );

ok($create->is_done, "Create request was completed");

my $wait = $ddb->wait_for_table_status(TableName => $table_name);

ok($wait->is_done, "Created table is ready");


my $description = $ddb->describe_table(TableName => $table_name);

ok($description->is_done, "Successfully described table");



$description = $description->get();

# Creation times always change.
delete $description->{CreationDateTime};

eq_or_diff($description, 
          {
              'TableSizeBytes' => 0,
              'ItemCount' => 0,
              'LocalSecondaryIndexes' => [
                  {
                      'IndexName' => 'UserDateIndex',
                      'KeySchema' => [
                          {
                              'KeyType' => 'HASH',
                              'AttributeName' => 'user_id'
                          },
                          {
                              'KeyType' => 'RANGE',
                              'AttributeName' => 'date'
                          }
                      ],
                      'ItemCount' => 0,
                      'IndexSizeBytes' => 0,
                      'Projection' => {
                          'ProjectionType' => 'KEYS_ONLY'
                      },
                  }
              ],
              'AttributeDefinitions' => [
                  {
                      'AttributeType' => 'N',
                      'AttributeName' => 'date'
                  },
                  {
                      'AttributeType' => 'N',
                      'AttributeName' => 'user_id'
                  }
              ],
              'KeySchema' => [
                  {
                      'KeyType' => 'HASH',
                      'AttributeName' => 'user_id'
                  },
                  {
                      'KeyType' => 'RANGE',
                      'AttributeName' => 'date'
                  },

              ],
              'TableName' => $table_name,
              'ProvisionedThroughput' => {
                  'ReadCapacityUnits' => 2,
                  'NumberOfDecreasesToday' => 0,
                  'WriteCapacityUnits' => 2
              },
              'TableStatus' => 'ACTIVE'
          }, "Table was correctly defined and described");

{
    my @all_tables;    
    ok($ddb->each_table(
        sub {
            my $table_name =shift;



( run in 1.422 second using v1.01-cache-2.11-cpan-364913b4093 )