Тестирование кода .NET в средах с частичным доверием

Я хочу проверить поведение определенного фрагмента кода .NET в средах с частичным доверием. Какой самый быстрый способ настроить это? Не стесняйтесь предполагать, что я (и другие читатели) - абсолютные новички CAS.

@ Ник: Спасибо за ответ. Увы, рассматриваемый инструмент явно предназначен для неуправляемого кода. Я не сказал «управляемый» в своем вопросе и не должен был предполагать, что люди сделают это из тега «.NET».

21.08.2008 18:29:42
5 ОТВЕТОВ
РЕШЕНИЕ

Это отличный вопрос, особенно с точки зрения TDD и проверки кода при различных сценариях доверия.

Я думаю, что подход к этому был бы чем-то вроде -

  • Создайте AppDomain в моем коде TDD, используя перегрузку AppDomain.CreateDomain (), которая позволяет передавать PermissionSet. Набор PermissionSet будет создан для соответствия различным сценариям доверия, с которыми вы хотите проверить.

  • Загрузите сборку, содержащую тестируемую логику, в домен приложения

  • Создавать экземпляры типов / методов вызова и т. Д. В домене приложения, ловушку исключений безопасности

Что-то вроде этого. У меня еще не было времени собрать подтверждение концепции.

3
25.07.2012 09:36:23

Используйте Microsoft Application Verifier .

AppVerifier помогает определить:

  • Когда приложение правильно использует API-интерфейсы: (небезопасные API-интерфейсы TerminateThread. Правильное использование API-интерфейсов локального хранилища потоков (TLS). O правильное использование манипуляций с виртуальным пространством (например, VirtualAlloc, MapViewOfFile).
  • Скрывает ли приложение нарушения прав доступа с помощью структурированной обработки исключений.
  • Является ли приложение пытается использовать недействительные дескрипторы.
  • Есть ли повреждения памяти или проблемы в куче.
  • Недостаточно ли у приложения недостаточно памяти.
  • Происходит ли правильное использование критических секций.
  • Будет ли приложение, работающее в административной среде, работать хорошо в среде с меньшими правами.
  • Существуют ли потенциальные проблемы, когда приложение работает как пользователь с ограниченными правами.
  • Существуют ли неинициализированные переменные в будущих вызовах функций в контексте потока.
1
21.08.2008 18:34:08

Вы должны посмотреть на .NET Framework Configuration Tool. Он находится в .NET SDK, и инструкции по его запуску можно найти здесь ... http://msdn.microsoft.com/en-us/library/2bc0cxhc.aspx

В разделе Политика безопасности во время выполнения вы найдете 3 уровня политики: Enterprise, Machine и User. Если вы углубитесь в Machine или User, вы найдете определения групп кодов и наборов разрешений . Когда вы говорите, что хотите протестировать некоторый код .NET в средах с частичным доверием, я предполагаю, что вы захотите проверить один из уже определенных стандартных наборов разрешений, таких как Интернет . Вам необходимо определить группу кодов, которая соответствует вашему приложению (или определенным сборкам), и назначить выбранный набор разрешений для этой группы кодов .

Вы также можете определить свои собственные наборы разрешений , но давайте пока будем проще.

Выберите, хотите ли вы, чтобы ваша новая группа кодов существовала в масштабе всей машины или только для вашей учетной записи пользователя, и просмотрите уровень политики «Машина» или «Пользователь» соответствующим образом. Вы увидите группу кодов под названием _All _ Code_. Создайте группу дочернего кода внутри этой, щелкнув правой кнопкой мыши и выбрав New ...

Дайте ему имя, скажем PartialTrustGroup , затем нажмите Next .

Вы должны указать условие членства для этой группы, и есть различные типы. Мне нравится создавать определенную папку с именем PartialTrust на моем компьютере, а затем создавать соответствующее условие членства в URL. Итак, мой URL выглядит следующим образом ... file: // c: / users / martin / documents /partaltrust / *

* - это подстановочный знак, чтобы поймать любую сборку под этим путем. Нажмите Далее .

Теперь вы можете выбрать набор разрешений для вашей новой группы кодов. А пока выбирай интернет . Это довольно ограниченный набор, похожий на песочницу Java-апплета. Нажмите Далее и Готово .

Теперь щелкните правой кнопкой мыши на новой кодовой группе и выберите «Свойства». На вкладке Общие убедитесь, что установлен самый верхний флажок, затем нажмите кнопку ОК.

Теперь к любым сборкам .NET, загружаемым из расположения под указанным вами URL, будет применен набор разрешений Интернета . Ожидайте получения некоторых исключений SecurityException, если вы не написали свой код, чтобы тщательно соблюдать ограниченный набор разрешений.

Извините, это длинное описание. Это действительно намного проще, чем кажется.

1
22.08.2008 15:31:30

Функциональность, которую вы ищете, встроена в визуальную студию:

На вкладке безопасности вашего проекта есть кнопка «Дополнительно ...», которая позволяет вам настроить, хотите ли вы выполнить отладку с полным доверием или с указанным уровнем доверия.

3
18.02.2009 12:39:25

Я только что опубликовал статью под названием « Частичное доверительное тестирование с xUnit.net» в своем блоге. В нем подробно описывается основанная на xUnit.net инфраструктура, которую мы используем в команде Entity Framework для выполнения кода со средним доверием.

Вот пример его использования.

public class SomeTests : MarshalByRefObject
{
    [PartialTrustFact]
    public void Partial_trust_test1()
    {
        // Runs in medium trust
    }
}

// Or...

[PartialTrustFixture]
public class MoreTests : MarshalByRefObject
{
    [Fact]
    public void Another_partial_trust_test()
    {
        // Runs in medium trust
    }
}
1
30.08.2012 02:22:41