Esempio n. 1
0
  def test_stress(self):
    num_repos = 5
    num_people = 10

    repos = []
    for i in range(0, num_repos):
      repos.append(Repo('/Repo%s' % i, datastore.DictDatastore()))
      print 'Created repo ', repos[-1].repoid


    people = []
    for i in range(0, num_people):
      p = PersonM('person%s' % i)
      p.first = 'first%d:' % i
      p.last = 'last%d:' % i
      p.phone = '%d:' % i
      p.gender = '%d:' % i
      p.age = 0
      p.commit()

      d = random.choice(repos)
      d.put(p)
      print 'Created person: ', p.key

    def randomPerson(repo):
      i = random.randint(0, num_people - 1)
      return repo.get(Key('/PersonM:person%s' % i))

    def updateField(field):
      d = random.choice(repos)
      p = randomPerson(d)
      if p is None:
        return

      if field == 'age':
        p.age += 1
      else:
        setattr(p, field, field + str(i))
      p.commit()
      d.merge(p)

    def shuffle():
      d1, d2 = random.sample(repos, 2)
      p = randomPerson(d1)
      if p is None:
        return

      d2.merge(p)


    for i in range(num_people * 10):
      updateField('first')
      updateField('last')
      updateField('phone')
      updateField('age')
      updateField('gender')

      shuffle()
      shuffle()
      shuffle()
      shuffle()
      shuffle()

    for d in repos:
      print 'Repo: ', d.repoid
      for i in range(num_people):
        key = Key('/PersonM:person%s' % i)

        p = d.get(key)
        if p is None:
          print key, 'not found'
        else:
          print p

    for i in range(num_people):
      key = Key('/PersonM:person%s' % i)
      p = repos[0].get(key)
      for d in repos:
        p = d.merge(p)

      # doule pass.
      for d in repos:
        p = d.merge(p)
        o = d.get(p.key)
        self.assertEqual(p, o)
        self.assertEqual(p.first, o.first)
        self.assertEqual(p.last, o.last)
        self.assertEqual(p.phone, o.phone)
        self.assertEqual(p.age, o.age)
        self.assertEqual(p.gender, o.gender)
        self.assertEqual(p.version, o.version)

        print 'In order:'
        last = None
        for person in d.query(Query(PersonM).order('key')):
          if last:
            self.assertTrue(str(person.key) > last)
          last = str(person.key)
          print person

        print 'Reverse:'
        last = None
        for person in d.query(Query(PersonM).order('-key')):
          if last:
            self.assertTrue(str(person.key) < last)
          last = str(person.key)
          print person

        result = d.query(Query(PersonM, limit=3).order('-key'))
        self.assertTrue(len(list(result)) == 3)